gdb调试core,gdb调试core文件命令(gdb调试core文件详解)

2023-03-26 1186阅读

温馨提示:这篇文章已超过510天没有更新,请注意相关的内容是否还可用!

gdb调试core,gdb调试core文件命令gdb调试core,gdb调试core文件命令及gdb调试core文件详解在软件开发中,经常会遇到程序崩溃的情况。gdb是一款非常强大的调试工具,可以帮助我们快速定位程序的问题。命令如下:gdb 例如:gdb ./myapp core.12345其中,myapp是可执行文件的名称,core.12345是gdb生成的core文件。Program terminated with signal表示程序是由于什么信号而终止的。()#1 0x00000000004004c8 in main at main.c:5其中,#0表示当前函数,后面的数字表示调用栈的层数。()其中,Id表示线程ID,Target Id表示目标ID,Frame表示当前函数。命令如下:thread 例如: thread 1[Switching to thread 1 ]#0 0x00007f4d6e9b6a20 in ??
gdb调试core,gdb调试core文件命令

gdb调试core,gdb调试core文件命令(gdb调试core文件详解)

gdb调试core,gdb调试core文件命令(gdb调试core文件详解)
(图片来源网络,侵删)
gdb调试core,gdb调试core文件命令(gdb调试core文件详解)
(图片来源网络,侵删)

gdb调试core,gdb调试core文件命令及gdb调试core文件详解

在软件开发中,经常会遇到程序崩溃的情况。这时候,我们需要通过调试工具来定位问题。gdb是一款非常强大的调试工具,可以帮助我们快速定位程序的问题。当程序崩溃时,gdb会生成一个core文件,我们可以通过gdb调试core文件来查找问题。

gdb调试core文件命令:

1. gdb <可执行文件> :启动gdb并加载core文件。

2. bt:显示函数调用栈。

3. info threads:显示线程信息。

4. thread <线程号>:切换到指定线程。

5. frame <帧号>:切换到指定帧。

6. p <变量名>:打印变量值。

7. x/<格式><地址>:以指定格式查看内存内容。

8. set var <变量名>=<值>:设置变量值。

9. list <函数名>:显示指定函数的源代码。

10. break <行号>/<函数名>:在指定行或函数处设置断点。

11. run:重新运行程序。

gdb调试core文件详解:

1. 启动gdb并加载core文件

首先,我们需要启动gdb并加载core文件。命令如下:

gdb <可执行文件>

例如:

gdb ./myapp core.12345

其中,myapp是可执行文件的名称,core.12345是gdb生成的core文件。

启动gdb后,会显示类似下面的信息:

GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git

Copyright (C) 2018 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-linux-gnu".

Type "show configuration" for configuration details.

For bug reporting instructions, please see:

<>.

Find the GDB manual and other documentation resources online at:

<>.

For help, type "help".

Type "apropos word" to search for commands related to "word"...

Reading symbols from ./myapp...done.

[New LWP 12345]

Core was generated by `./myapp'.

Program terminated with signal SIGSEGV, Segmentation fault.

#0 0x00007f4d6e9b6a20 in ?? ()

(gdb)

其中,LWP表示Light Weight Process,也就是线程。12345是线程的ID。Core was generated by表示core文件是由哪个程序生成的。Program terminated with signal表示程序是由于什么信号而终止的。在这个例子中,程序是由于SIGSEGV信号(段错误)而终止的。

2. 显示函数调用栈

一般情况下,我们需要查看程序崩溃时的函数调用栈。命令如下:

bt

例如:

(gdb) bt

#0 0x00007f4d6e9b6a20 in ?? ()

#1 0x00000000004004c8 in main (argc=1, argv=0x7ffcd4ebf178) at main.c:5

(gdb)

其中,#0表示当前函数,后面的数字表示调用栈的层数。在这个例子中,程序是在main函数中崩溃的。

3. 显示线程信息

如果程序是多线程的,我们可以使用info threads命令来显示线程信息。命令如下:

info threads

例如:

(gdb) info threads

Id Target Id Frame

1 LWP 12345 0x00007f4d6e9b6a20 in ?? ()

(gdb)

其中,Id表示线程ID,Target Id表示目标ID,Frame表示当前函数。

4. 切换到指定线程

如果程序是多线程的,我们可以使用thread命令来切换到指定线程。命令如下:

thread <线程号>

例如:

(gdb) thread 1

[Switching to thread 1 (LWP 12345)]

#0 0x00007f4d6e9b6a20 in ?? ()

(gdb)

5. 切换到指定帧

如果我们需要查看某个函数的局部变量值,可以使用frame命令来切换到指定帧。命令如下:

frame <帧号>

例如:

(gdb) frame 1

#1 0x00000000004004c8 in main (argc=1, argv=0x7ffcd4ebf178) at main.c:5

5 char *p = NULL;

(gdb)

6. 打印变量值

如果我们需要查看某个变量的值,可以使用p命令来打印变

有云计算,存储需求就上慈云数据:点我进入领取200元优惠券
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]