inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

멀티스레드 프로그래밍에서 디버깅하면서 문제 추적하려면 어떻게 해야하나요?

1714

dustjdtns00

작성한 질문수 2

0

멀티스레드 병렬 프로그래밍은 싱글 스레드와 다르게 디버깅하기가 매우 까다롭더라구요 ㅠㅠ

I/O 출력을 하거나 로그 파일로 따로 빼서 로깅을 확인하는건 싱글스레드까지만 가능하고 멀티스레드에서는 별 도움이 되지 못하더라구요

이 외에 다른 방법으로는 디버깅 모드로 실행 시 문제가 발생했을 때, memory를 확인하면서 역추적하면서 문제를 해결하는 방법밖에 떠오르질 않는데, 이 방법이 맞을까요?

예를 들면 여러 스레드를 실행하면서 call 횟수, 작업하는 변수의 주소값, 수행 시간 등을 list에 저장한 다음에 조사식에 해당 list를 끌어와서 확인해보려고 하는데...

현업에서는 멀티스레드 로깅 및 문제 역추적할 때 어떤 방법을 사용하나요..?

 

네트워크 MMORPG windows-server

답변 2

0

Rookiss

사실 메모리를 봐도 쉽지 않고, 코드를 보면서 상상력(?)을 동원하며 볼 수밖에 없습니다.
그 정도로 세세하게 보는 것은 의미 없고 경합이 일어났을 시 어떤 일이 벌어지는지를 중점으로 봐야합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

멀티스레드 프로그래밍에서 디버깅은 실제로 매우 까다롭습니다. dustjdtns00님께서 언급하신 것처럼 변수의 추적, 시간 측정 등을 통해 문제를 역추적하는 방법은 맞습니다. 실제로 현업에서도 사용하는 몇 가지 방법을 소개드리겠습니다:

  1. 조건부 중단점: 다중 스레드 중 특정 조건을 만족하는 경우에만 중단하여 문제가 발생하는 상황을 좁혀나갈 수 있습니다.
  2. 로깅: 스레드별로 분리된 로그 파일을 생성하거나 로그에 스레드 ID를 포함시켜 분석을 용이하게 합니다.
  3. 동기화 문제 해결: mutex, semaphore 등을 활용하여 리소스 접근을 제어하고, 데드락 탐지와 같은 도구를 사용하여 동기화 문제를 진단합니다.
  4. 프로파일링 도구 사용: 시스템의 리소스 사용 현황, 스레드의 상태 및 실행 시간 등을 확인할 수 있는 다양한 프로파일링 도구를 사용하여 성능 병목 현상이나 문제점을 찾아냅니다.
  5. 멀티스레드에 특화된 디버깅 도구 사용: GDB, Visual Studio, 오픈소스 디버깅 도구 등 멀티스레드에 최적화된 디버깅 도구를 사용합니다.

더불어, Spring Boot 애플리케이션의 로깅 설정을 참고하면 멀티스레드 환경에서 로깅을 좀 더 체계적으로 수행할 수 있는 방법을 얻을 수도 있습니다. 예를 들어, Spring Boot에서는 다음과 같은 방식으로 로깅 레벨을 조정하거나 추가적인 로깅 모드를 활성화 할 수 있습니다:

  • --debug 또는 --trace 플래그를 이용하여 애플리케이션을 실행하면 기본 로깅 외에 더 많은 정보를 출력하여 문제를 진단하는 데 도움을 줄 수 있습니다.
  • Spring Data JPA에서는 CustomizableTraceInterceptor를 사용하여 JpaRepository 내부에서 호출되는 메소드에 대한 더 상세한 로깅 정보를 얻을 수 있습니다.

이러한 방법들을 자신이 사용하고 있는 언어나 환경에 맞게 적용해볼 수 있습니다.

참조 URL:
- Spring Boot 로깅 문서: Console Output
- Spring Data JPA 로깅 예제: FAQ.Common

이러한 기법들을 혼합하여 사용하면 멀티스레드 환경에서 발생하는 복잡한 문제들을 효과적으로 분석하고 해결할 수 있게 됩니다.

Memory Pool에서 오버플로우 질문입니다.

0

63

2

포토폴리오 및 진로 관련하여 고민입니다.

0

112

1

포토폴리오 관련 고민입니다.

0

62

1

실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.

0

82

2

성능 테스트 결과

0

103

2

게임 서버 Stateful, Stateless 진로 고민

0

121

1

WaitOnAddress와 Sleep의 차이 질문

0

83

1

궁금한거 있습니다.

0

82

2

JobTimer 구동 스레드

0

107

2

TryPop() 동작 관련 질문

0

81

1

로드맵 C#서버 C++서버 방향성 질문

0

148

2

스레드 id를 출력할떄 메인스레드 id도 출력되나요?

0

73

1

생명주기를 위한 의도적 복사

0

86

2

락프리의 실무에서 사용 질문

0

139

2

32bit threadID와 16비트 상위 WriteFlag에 대해

0

101

2

mutex와 sleep 차이점

0

117

1

실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다

0

152

2

Stomp Allocator의 Release함수에 대한 질문입니다.

0

96

1

공부법 관련해서

0

183

2

MakeShared 함수 관련

0

114

1

지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.

0

144

2

운영체제관련 질문입니다

0

131

1

send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.

0

117

2

메모리 풀 질문있습니다.

0

124

1