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

2023-03-26 1192阅读

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

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购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]