2011-04-09 1 views
1

내 C++ 응용 프로그램이 충돌 할 때 stackdump를 생성하고 덤프 된 레지스터 값을 표시하려고합니다.gdb의 응용 프로그램이 gdb없이 충돌 할 때 stackdump 및 덤프 된 레지스터 값을 생성하는 방법은 무엇입니까?

내 응용 프로그램은 Linux에서 실행됩니다.

내 프로그램이 stackdump를 생성하고 충돌 할 때 stackdump를 생성하고 사용자가 다음에 실행할 때 덤프 된 레지스터 값을 표시 할 수 있기를 바란다.이 정보를 내게 보낼 수 있는지 묻는 메시지가 표시되므로 추적 할 수있다. 문제. stacktrace 정보를 처리 할 수 ​​있지만이 두 가지를 생성하는 방법을 모르겠습니다. 어떤 아이디어? 모든 repliers

사전 감사는 감사

+1

[Google의'stacktrace.cc'] (http://code.google.com/p/google-perftools/source/browse/trunk/src/)는 몇 년 전에 출시되었을 때 큰 인기를 얻었습니다. 여전히 인기가 있는지 모르겠지만 헤더에는 libunwind가 언급되어 있습니다. libunwind는 패키지'libunwind7'와'-dev'에서 우분투 시스템에서 사용할 수 있습니다. – sarnold

답변

1

The 대답 VLC이 질문에 귀하의 경우 일부 사용 될 수 있습니다. 그러나 답안의 코드는 스택 추적을 인쇄하고 SIGSEGV에만 등록합니다. 귀하의 필요를 충족시키기 위해 더 많은 일을해야 할 수도 있습니다.

+0

안녕하세요 vpit, 답장을 보내 주셔서 감사합니다. 당신은 절대적으로 맞습니다 ....하지만 레지스터와 스택 덤프 값을 인쇄해야합니다. 나 역시 스택 트레이스를 인쇄했다. 그래서, 어떻게 디버거 사용하지 않고 내 응용 프로그램에서 할 수 있습니다. 어떤 아이디어 ??? – vlc

+0

libsigsegv.so가 언급 된대로 빌드되어 앱과 함께 사용자에게 제공되면 스택 추적 및 SIGSEGV에 등록 상태가 표시됩니다. 귀하의 앱, 건물은 gcc에'-rdynamic'을 전달해야합니다. SIGSEGV 이외의 다른 신호에 충돌이 예상되는 경우 해당 신호에 대한 신호 처리기도 등록하십시오. gdb가 필요 없습니다. 내 프로그램이 생성하는 가장 일반적인 예외이기 때문에이 코드를 사용하여 SIGSEGV를 잡습니다. – vpit3833

관련 문제