在使用gdb调试内核转储时,如何设置断点并使其中断?

在使用gdb调试内核转储时,如何设置断点并使其中断?,gdb,coredump,Gdb,Coredump,在使用gdb调试内核转储时,如何设置断点并使其中断? 当我使用命令“gdb program core”时,进程在崩溃点停止, 在停止之前,我如何使流程中断。 如果无法使其中断,调试核心转储时可以在gdb中使用哪些命令?检查核心文件时,可以列出堆栈跟踪或查看执行的函数参数: gdb <program> <core> (gdb) backtrace (gdb) print <variable or *address> <pre> [narz@dev

在使用gdb调试内核转储时,如何设置断点并使其中断? 当我使用命令“gdb program core”时,进程在崩溃点停止, 在停止之前,我如何使流程中断。
如果无法使其中断,调试核心转储时可以在gdb中使用哪些命令?

检查核心文件时,可以列出堆栈跟踪或查看执行的函数参数:

gdb <program> <core>
(gdb) backtrace
(gdb) print <variable or *address>
<pre> 
[narz@dev101 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>
gdb
(gdb)回溯
(gdb)打印
如果要设置断点,请使用gdb打开一个没有核心文件的程序,以便运行它:

gdb <program>
(gdb) break <line>
(gdb) run
gdb
(gdb)中断
(gdb)运行

检查核心文件时,例如,可以列出堆栈跟踪或查看执行的函数参数:

gdb <program> <core>
(gdb) backtrace
(gdb) print <variable or *address>
<pre> 
[narz@dev101 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>
gdb
(gdb)回溯
(gdb)打印
如果要设置断点,请使用gdb打开一个没有核心文件的程序,以便运行它:

gdb <program>
(gdb) break <line>
(gdb) run
gdb
(gdb)中断
(gdb)运行

检查核心文件时,例如,可以列出堆栈跟踪或查看执行的函数参数:

gdb <program> <core>
(gdb) backtrace
(gdb) print <variable or *address>
<pre> 
[narz@dev101 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>
gdb
(gdb)回溯
(gdb)打印
如果要设置断点,请使用gdb打开一个没有核心文件的程序,以便运行它:

gdb <program>
(gdb) break <line>
(gdb) run
gdb
(gdb)中断
(gdb)运行

检查核心文件时,例如,可以列出堆栈跟踪或查看执行的函数参数:

gdb <program> <core>
(gdb) backtrace
(gdb) print <variable or *address>
<pre> 
[narz@dev101 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>
gdb
(gdb)回溯
(gdb)打印
如果要设置断点,请使用gdb打开一个没有核心文件的程序,以便运行它:

gdb <program>
(gdb) break <line>
(gdb) run
gdb
(gdb)中断
(gdb)运行

如果要跟踪导致崩溃的步骤,可以在加载core后重新启动程序。使用“开始”,这将带您进入程序的第一行。然后在main()和崩溃点之间设置断点。 见下面的示例:


[narz@dev101src]$gdb-n-quiet myprogram core.12046
从…读取符号完成。
[新线程12046]
正在从/usr/lib64/libstdc++.so.6读取符号…(未找到调试符号)…已完成。
为/usr/lib64/libstdc++.so.6加载的符号
正在从/lib64/libm.so.6读取符号…(未找到调试符号)…已完成。
为/lib64/libm.so.6加载的符号
正在从/lib64/libgcc_.s.so.1读取符号…(未找到调试符号)…已完成。
为/lib64/libgcc_.so.1加载的符号
正在从/lib64/libc.so.6读取符号…(未找到调试符号)…已完成。
为/lib64/libc.so.6加载的符号
正在从/lib64/ld-linux-x86-64.so.2…读取符号(未找到调试符号)…完成。
为/lib64/ld-linux-x86-64.so.2加载的符号
核心由“./myprogram”生成。
程序以信号11终止,分段故障。
#堆栈处的main()中0 0x0000000000400658。cpp:6
6 int b=*x;
(gdb)Px
$1=(整数*)0x0
(gdb)l
1#包括
2.
3内部干管(空)
4       {
5 int*x=NULL;
6 int b=*x;
7返回0;
8       }
(gdb)启动
现在没有核心文件。
0x40064c处的临时断点1:文件stack.cpp,第5行。
启动程序:/u03/narz/projects/xxxxx/xxxxx/src/myprogram
stack.cpp处的临时断点1,main():5
5 int*x=NULL;
(gdb)

如果要跟踪导致崩溃的步骤,可以在加载core后重新启动程序。使用“开始”,这将带您进入程序的第一行。然后在main()和崩溃点之间设置断点。 见下面的示例:


[narz@dev101src]$gdb-n-quiet myprogram core.12046
从…读取符号完成。
[新线程12046]
正在从/usr/lib64/libstdc++.so.6读取符号…(未找到调试符号)…已完成。
为/usr/lib64/libstdc++.so.6加载的符号
正在从/lib64/libm.so.6读取符号…(未找到调试符号)…已完成。
为/lib64/libm.so.6加载的符号
正在从/lib64/libgcc_.s.so.1读取符号…(未找到调试符号)…已完成。
为/lib64/libgcc_.so.1加载的符号
正在从/lib64/libc.so.6读取符号…(未找到调试符号)…已完成。
为/lib64/libc.so.6加载的符号
正在从/lib64/ld-linux-x86-64.so.2…读取符号(未找到调试符号)…完成。
为/lib64/ld-linux-x86-64.so.2加载的符号
核心由“./myprogram”生成。
程序以信号11终止,分段故障。
#堆栈处的main()中0 0x0000000000400658。cpp:6
6 int b=*x;
(gdb)Px
$1=(整数*)0x0
(gdb)l
1#包括
2.
3内部干管(空)
4       {
5 int*x=NULL;
6 int b=*x;
7返回0;
8       }
(gdb)启动
现在没有核心文件。
0x40064c处的临时断点1:文件stack.cpp,第5行。
启动程序:/u03/narz/projects/xxxxx/xxxxx/src/myprogram
stack.cpp处的临时断点1,main():5
5 int*x=NULL;
(gdb)

如果要跟踪导致崩溃的步骤,可以在加载core后重新启动程序。使用“开始”,这将带您进入程序的第一行。然后在main()和崩溃点之间设置断点。 见下面的示例:


[narz@dev101src]$gdb-n-quiet myprogram core.12046
从…读取符号完成。
[新线程12046]
正在从/usr/lib64/libstdc++.so.6读取符号…(未找到调试符号)…已完成。
为/usr/lib64/libstdc++.so.6加载的符号
正在从/lib64/libm.so.6读取符号…(未找到调试符号)…已完成。
为/lib64/libm.so.6加载的符号
正在从/lib64/libgcc_.s.so.1读取符号…(未找到调试符号)…已完成。
为/lib64/libgcc_.so.1加载的符号
正在从/lib64/libc.so.6读取符号…(未找到调试符号)…已完成。
为/lib64/libc.so.6加载的符号
正在从/lib64/ld-linux-x86-64.so.2…读取符号(未找到调试符号)…完成。
为/lib64/ld-linux-x86-64.so.2加载的符号
核心由“./myprogram”生成。
程序以信号11终止,分段故障。
#堆栈处的main()中0 0x0000000000400658。cpp:6
6 int b=*x;
(gdb)Px
$1=(整数*)0x0
(gdb)l
1#包括
2.
3内部干管(空)
4       {
5整数*