2013-11-15 2 views
3

이와 같이 백 트레이스를 많이 얻을 : 정확히 유용하지 않습니다GDB Windows ?? 는 MinGW GDB 버전 7.6을 사용하여 역 추적

(gdb) bt 
#0 0x000000007703d256 in ntdll!RtlEnterCriticalSection() 
    from C:\Windows\SYSTEM32\ntdll.dll 
#1 0x0000000000000000 in ??() 

합니다.

왜 이런가요? 어쨌든 더 유용한 것을 얻을 수 있습니까? 이 내가 얻는 백 트레이스 일 때 오류가 발생했을 때 복잡한 멀티 스레드 프로그램이 무엇을하는지 알아 내려고 시도하는 것은 절대적으로 고통 스럽습니다.

+0

gdb 논스톱 모드를 사용하도록 설정 했습니까? gdb [여기] (http://blogs.adobe.com/flascc/2012/11/09/debugging-multi-threaded-flascc-applications-with-gdb/)와 함께 사용하는 좋은 멀티 스레드 디버깅 예제 – amdixon

+0

이것은 32 또는 64 앱, OS와 마찬가지입니까? 또한 스택에는'ntdll '에 대한 호출이 포함되어 있으므로이 호출이 시스템 호출의 일부라고 말하는 것이 안전합니다. .NET 예외에 영향을 미치는 커널 호출에 대해 내가 아는 것을 알고, 여기서 비슷한 것이 역 추적에 영향을 미쳤다면 놀랄 일이 아닙니다. –

+0

64 비트 앱/64 비트 OS. –

답변

0

gdb가 IMHO에서 아주 임의적으로 선택된 "현재"스레드의 개념을 가지고있는 것 같습니다.

gdb 명령 info threads을 실행하여 프로그램이 현재 실행중인 스레드를 확인할 수 있습니다. "현재"스레드를 thread <num>으로 전환하십시오. 의미있는 역 추적을 다시 시도하십시오.

또한, GDB는 실행 파일에 디버그 정보를 인코딩하는 데 사용되는 포맷에 대응 할 수

    • 실행 파일이 디버그 정보 (-g)로 컴파일되어 있는지 확인합니다. gdb가`main() '에 중단 점을 설정할 수 있는지 확인하고 그곳에서 합리적인 행동을 할 수 있습니다.
  • 2

    나는 컴파일러를 사용하여는 MinGW (64)를 사용하여 동일한 문제로 실행 -g3 -OG 결국 잘 모든 역 추적을 보여 주었다 전환됩니다.