2010-06-22 208 views
1

編程接收到的信號SIGSEGV,分段錯誤。 0x08049795 in execute_jobs() 當前語言:auto;目前在彙編在gdb中這意味着什麼?

(GDB)信息符號0x08049795 execute_jobs + 22 .text段

(GDB)p型0x08049795 類型= INT

如何獲得在發生錯誤的行號?

+4

首先,您需要使用-ggdb3進行編譯,然後GDB會爲您提供該信息。 – 2010-06-22 18:22:09

+0

使用調試符號進行編譯,不進行優化,然後通過valgrind運行。您將立即通過觀看煙花來查看段落原因,請參閱http://valgrind.org – 2010-06-22 20:28:20

回答

2

gdb命令「bt」會向您顯示回溯。除非你損壞了堆棧,否則應該顯示導致段錯誤的函數調用序列。爲了獲得更有意義的信息,請確保您已通過在gcc/g ++命令行中包含-g來編譯帶有調試信息的程序。

+0

謝謝。我知道這一點。 – blacktooth 2010-06-22 18:34:40

+0

編程接收到的信號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

7

您的二進制文件沒有用調試信息編譯。與至少-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 

看到實際指令。

+0

程序收到信號SIGSEGV,分段故障。 0x0804ae71在./machinejob.c:860 JOB JOB1 = *((JOB *)元素1)job_comparator_randomjobid(元素1 = 0x804d0c0,在element2 = 0x804d354); 如何確定導致分段故障的確切錯誤? – blacktooth 2010-06-22 19:49:52

+0

@blacktooth,你必須在860行圍繞'machinejob.c'顯示代碼,以便我們能夠幫助你。 'JOB'是什麼?一個指針? 'element1'的類型是什麼?根本原因是某個地方的無效地址。 – 2010-06-22 19:56:40