2009-10-30 4 views
1

내 코코아 응용 프로그램이 코드에서 어설 션을 치면 gdb는 예상대로 프롬프트를 표시하지만 올바른 스레드에서는 절대로 사용하지 않습니다.gdb에서 어떤 스레드가 단언 되었습니까?

은 내가 엑스 코드의 GUI 디버거를 사용할 수 있습니다 알고 그것을 조금 덜 고통스러운 수 있습니다,하지만 난 모르는 GDB 명령 줄 트릭이 있어야한다 생각하고 있어요.

각 스레드로 변경하고 where을 발행 이외의 주장 스레드를 찾는 쉬운 방법이 있나요?

답변

1

(gdb) thread apply all bt

+0

지금 내가하는 일입니다. 이 문제는 마지막 스택 프레임 만 보여 주므로 항상 도움이되는 것은 아니므로 각각의 위치에서 작업을 끝내야합니다. – nall

+0

그러면 실행중인 모든 스레드의 스택 추적이 표시되므로 어떤 스레드가 단정되었는지 쉽게 확인할 수 있습니다. 나는 이것을 '정보 스레드'와 혼합한다고 생각합니다. –

+1

네가 맞아. 방금 커피가 더 필요했습니다. 감사! – nall

3

니콜라이는 '스레드가 모든 BT를 적용'을 제안했다. 또한 '정보 스레드'가있어 때로는 원하는 정보를 덜 자세하게 찾을 수 있습니다.

가정 '정보 스레드는'당신이 원하는 표시되지 않습니다, 당신은 모든 스레드에 대한 스택 추적을 빗 강제로. 프로세스에 스레드가 많은 경우 고통 스러울 수 있습니다 (일부 프로그램에서는 수백 개가 될 수 있음). 좀 더 다루기 쉬운 뭔가 스레드 당 표시되는 프레임 수 (예를 들어 5 개 프레임)도

(gdb) thread apply all where 5 

그러나 당신이 무엇을 찾고 호출기 프롬프트를 타격 유지해야하는 경우가 있으므로이를 통해 빗질하는 것은 어려울 수를 제한 할 수 있습니다 원하는대로 쉽게 놓칠 수 있습니다. 그런 경우, 나는 지금 gdb.txt을 검토하고 스레드를 찾을

(gdb) set height 10000 
(gdb) set logging on 
(gdb) thread apply all where 5 
(gdb) shell 

매우 도움이 호출기를 로깅을 활성화하고 마비의 조합을 발견했습니다.

관련 문제