2015-05-14 54 views
0

如何使用gdb調試核心轉儲時設置斷點並使其中斷? 當我使用命令「gdb的程序核心」,該過程停止在崩潰點, 我怎麼能制止那裏之前使該進程中斷。 如果我不能讓它中斷,我可以在調試核心轉儲時在gdb中使用哪些命令?如何在使用gdb調試核心轉儲時設置斷點並使其中斷?

+1

調試核心時,您沒有運行該程序,因此沒有斷點。如果你問如何調試GDB,請澄清。 –

回答

2

如果要跟蹤導致崩潰的步驟,則可以在加載內核後重新啓動程序。使用「開始」,這會將您帶到程序的第一行。然後在main()和崩潰點之間設置斷點。 請參閱下面的示例:

<pre> 
[[email protected] src]$ gdb -n -quiet myprogram core.12046 
Reading symbols from </my/path/>...done. 
[New Thread 12046] 
Reading symbols from /usr/lib64/libstdc++.so.6...(no debugging symbols found)...done. 
Loaded symbols for /usr/lib64/libstdc++.so.6 
Reading symbols from /lib64/libm.so.6...(no debugging symbols found)...done. 
Loaded symbols for /lib64/libm.so.6 
Reading symbols from /lib64/libgcc_s.so.1...(no debugging symbols found)...done. 
Loaded symbols for /lib64/libgcc_s.so.1 
Reading symbols from /lib64/libc.so.6...(no debugging symbols found)...done. 
Loaded symbols for /lib64/libc.so.6 
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done. 
Loaded symbols for /lib64/ld-linux-x86-64.so.2 
Core was generated by `./myprogram'. 
Program terminated with signal 11, Segmentation fault. 
#0 0x0000000000400658 in main() at stack.cpp:6 
6    int b=*x; 
(gdb) p x 
$1 = (int *) 0x0 
(gdb) l 
1  #include <iostream> 
2 
3  int main(void) 
4  { 
5    int* x=NULL; 
6    int b=*x; 
7    return 0; 
8  } 
(gdb) start 
No core file now. 
Temporary breakpoint 1 at 0x40064c: file stack.cpp, line 5. 
Starting program: /u03/narz/projects/xxxxx/xxxxx/src/myprogram 

Temporary breakpoint 1, main() at stack.cpp:5 
5    int* x=NULL; 
(gdb) 

</pre> 
1

當您檢查覈心文件就可以了,例如列表中的堆棧跟蹤或視圖下執行函數參數:

gdb <program> <core> 
(gdb) backtrace 
(gdb) print <variable or *address> 

如果你想設置斷點打開一個程序使用gdb沒有核心文件,這樣就可以運行它:

gdb <program> 
(gdb) break <line> 
(gdb) run 
相關問題