2012-07-25 2 views
2

나는 아래와 같은 몇 가지는 C 문제 ++ 코드의 조각 데 :디버깅 기호없이 외부 라이브러리에서 어떤 예외가 발생하는지 어떻게 결정합니까?

try { 

     /* some code here */ 

} catch(...) { 

     /* ... */ 
} 

나는 gdb를 try 블록과 어떤 점 뭔가에 포함 된 코드를 단계별로있어가 발생되고있다 . throws 함수 호출이 라이브러리에서 가져오고 관련된 디버깅 기호가 없기 때문에 실제로 무엇인지 알 수 없습니다.

gdb가 catch 블록에서 무엇이 잡히고 있는지 판단 할 수있는 방법이 있습니까?

+0

catch 문에서 예외를 인쇄 해 보았습니까? 어쩌면 예외가 어디에서 왔는지 더 명확하게 이해할 수 있습니다 (심지어 gdb를 사용하지 않고) –

+0

라이브러리가 공개 된 API (throw되는 것을 포함하여)를 문서화하지 않으면 다른 라이브러리 선택을 강력하게 고려해야합니다. –

답변

1

call current_exception()을 시도 할 수 있습니다. 플랫폼에서 지원되는 경우 현재 예외에 대해 exception_ptr을 반환합니다. exception_ptr에 무엇이 포함되어 있는지 정확히 지정하지는 않지만, x으로 검사하여 무언가를 알아낼 수 있는지 확인할 수 있습니다.

일부 레지스터에 현재 예외 데이터가 포함되어 있지만 사용중인 아키텍처를 지정하지 않았기 때문일 수 있습니다.

관련 문제