編程接收到的信號SIGSEGV,分段錯誤。 0x08049795 in execute_jobs() 當前語言:auto;目前在彙編在gdb中這意味着什麼?
(GDB)信息符號0x08049795 execute_jobs + 22 .text段
(GDB)p型0x08049795 類型= INT
如何獲得在發生錯誤的行號?
編程接收到的信號SIGSEGV,分段錯誤。 0x08049795 in execute_jobs() 當前語言:auto;目前在彙編在gdb中這意味着什麼?
(GDB)信息符號0x08049795 execute_jobs + 22 .text段
(GDB)p型0x08049795 類型= INT
如何獲得在發生錯誤的行號?
gdb命令「bt」會向您顯示回溯。除非你損壞了堆棧,否則應該顯示導致段錯誤的函數調用序列。爲了獲得更有意義的信息,請確保您已通過在gcc/g ++命令行中包含-g來編譯帶有調試信息的程序。
謝謝。我知道這一點。 – blacktooth 2010-06-22 18:34:40
編程接收到的信號SIGSEGV,分段故障。 (job_comparator_randomjobid(element1 = 0x804d0c0,element2 = 0x804d60c)at ./machinejob.c:860 JOB job1 = *((JOB *)element1); (gdb)info symbol 0x0804ae2a job_comparator_randomjobid + 20 in section .text 20以上是什麼? – blacktooth 2010-06-22 18:37:20
您的二進制文件沒有用調試信息編譯。與至少-g
重建(或-ggdb
,或-ggdb -g3
,見GCC manual。)
從GDB輸出的確切行:
(gdb) info symbol 0x08049795 execute_jobs + 22 in section .text
指在地址0x08049795
,這是從功能execute_jobs
開始22個字節,其指令,產生了分段故障。
(gdb) ptype 0x08049795 type = int
在這裏,你要求的是一個整型的類型,並且GDB愉快地回覆。不要
(gdb) x/10i 0x08049795
或
(gdb) disassemble execute_jobs
看到實際指令。
程序收到信號SIGSEGV,分段故障。 0x0804ae71在./machinejob.c:860 JOB JOB1 = *((JOB *)元素1)job_comparator_randomjobid(元素1 = 0x804d0c0,在element2 = 0x804d354); 如何確定導致分段故障的確切錯誤? – blacktooth 2010-06-22 19:49:52
@blacktooth,你必須在860行圍繞'machinejob.c'顯示代碼,以便我們能夠幫助你。 'JOB'是什麼?一個指針? 'element1'的類型是什麼?根本原因是某個地方的無效地址。 – 2010-06-22 19:56:40
首先,您需要使用-ggdb3進行編譯,然後GDB會爲您提供該信息。 – 2010-06-22 18:22:09
使用調試符號進行編譯,不進行優化,然後通過valgrind運行。您將立即通過觀看煙花來查看段落原因,請參閱http://valgrind.org – 2010-06-22 20:28:20