• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

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

23.12.16 23:02 작성 조회수 574

0

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

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

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

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

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

 

답변 2

·

답변을 작성해보세요.

0

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

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.18

안녕하세요, 인프런 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

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