:
이 명령 줄 매개 변수 주어지면에서 핵심 덤프가 발생 내 테스트 프로그램 :
int a(int argc)
{
if (argc > 1) {
int *p = 0;
*p = *p +1;
return *p;
}
else {
return 0;
}
}
int b(int argc)
{
return a(argc);
}
int main(int argc, char *argv[])
{
int res = b(argc);
return res;
}
내 파이썬 스크립트 my_check를 .py :
def my_signal_handler (event):
if (isinstance(event, gdb.SignalEvent)):
log_file_name = "a.out.crash." + str(gdb.selected_inferior().pid) + ".log"
gdb.execute("set logging file " + log_file_name)
gdb.execute("set logging on")
gdb.execute("set logging redirect on")
gdb.execute("thread apply all bt")
gdb.execute("q")
gdb.events.stop.connect(my_signal_handler)
gdb.execute("set confirm off")
gdb.execute("set pagination off")
gdb.execute("r")
gdb.execute("q")
그래서 우선 a.out 및 충돌은 없다. 어떤 로그 파일이 생성되지 않습니다 :
GDB -q -x my_check.py --args ./a.out>을/dev/null
다음 내가 a.out을 실행하고 그것을 하나 개의 매개 변수를 제공 :
>gdb -q -x my_check.py --args ./a.out 1 >/dev/null
그리고이 충돌 보고서입니다 :
또는
>cat a.out.crash.13554.log
Thread 1 (process 13554):
#0 0x0000000000400555 in a (argc=2) at main.cpp:5
#1 0x000000000040058a in b (argc=2) at main.cpp:15
#2 0x00000000004005a3 in main (argc=2, argv=0x7fffffffe198) at main.cpp:20
http://www.commandlinefu.com/commands/view/4039/print-stack-trace-of-a-core-file-without-needing-to-enter-gdb-interactively –
코어를 활성화 할 수 있습니까? 파일을 시스템에 저장하고 역 추적을 그렇게 할 수 있습니까? 그것은 gdb 루프보다 훨씬 쉬워 보입니다. –
'그래서 문제를 디버깅하기 위해 충돌에서 백 트레이스가 필요합니다. '- 충돌에서 핵심 파일을 분석 할 수없는 이유에 대한 답을 찾지 못했습니까? 꽤 큰가? –