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

2024年2月23日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

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.0409-git

Copyright (C) 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命令来打印变

1、腾讯云优惠活动汇总【点此直达
2、阿里云优惠活动大全【点击直达
3、游戏服务器:自建幻兽帕鲁服务器不卡【点击进入教程页 】一键部署!
4、免费服务器:雨云【 点击直达 】了解.
10年老程序吐血建议:云产品续费贵,【点此 】抢腾讯云3年5年服务器,升级贵,选配置高的,新人首购便宜,不要浪费新人首购资格,一次到位,后期少花钱、少折腾。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: