2010-01-14 3 views
4

예외 스택 추적을 구현하는 가장 좋은 방법은 무엇입니까?예외 stacktrace

uncaught_exception()을 사용하여 일종의 해결책을 찾았지만 모든 함수에 일부 코드를 추가해야합니다.

나는 리눅스와 윈도우

+0

어떤 종류입니까? 출력보고 싶니? –

+0

Dupe : http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes –

+0

이것은 같은 질문이 아닙니다. 내 응용 프로그램이 충돌 할 때 stacktrace를 원하지 않는다. e.printStackTrace()와 매우 흡사하게 stacktrace를 예외에 붙이고 싶다. Java에서 –

답변

4

내가 할 수있는 크로스 플랫폼 방법이 생각하지 않습니다에서 GCC 작업 뭔가를해야합니다. 윈도우의 경우 StackWalk 메서드를 살펴보십시오. 리눅스에서, 남자 백 트레이스. 이것은 정보를 얻을 것이다; 형식을 지정하는 것은 사용자의 몫입니다.

4

스택을 푸는 신뢰할 수있는 교차 플랫폼 방법이 있는지 확실하지 않습니다.

내가 작업 해본 모든 플랫폼/아키텍처는 예외가 발생했을 때 스택을 걷고 주소를 함수 이름과 일치시키는 방법을 제공합니다. 이들 중 어느 것도 이식 가능하지 않지만,보고 프레임 워크는 실제 스택 보행 코드가 플랫폼 특정 (Windows의 경우 StackWalk 또는 Linux의 경우 역 추적)으로 이식 가능하도록 작성 될 수 있습니다.

libunwind 프로젝트를 살펴보십시오. 나는 이것을 본 적이 없거나 본 적이 없으므로 당신이 찾고있는 것이 아닐 수도 있습니다.

2

문자열로 현재 스택 추적을 생성하는 일부 코드를 구현했습니다. 관심이 있으시면 this file의 1220 줄에서 시작하는 GetStackTrace() 함수를 살펴보십시오. 이 기능은 Linux, MacOS/X 및 Windows에서 작동합니다 (Windows 구현을 here에서 빌려 왔으며 Windows .... bleah에서이 기능을 구현하는 데 엄청난 양의 코드가 필요함을 참고하십시오)