Linux下GDB调试工具使用命令详解

来源:互联网 发布:java中常量的写法 编辑:程序博客网 时间:2024/06/04 18:29

背景:

之前开发的一系列项目,有windows下的也有Linux环境下的,java or C#项目均有其ide工具的强势debug功能,Linux下python项目和c++项目一直都通过写日志进行错误跟踪,听说gdb很强大,本人就我在项目中所遇到的debug的过程进行阐述,命令可能不全,列举的都是我用到的,解决了我的问题,在此作一个纪录。


1. 第一步安装gdb, 这个在网上可以搜索很多,我主要说下Mac下如何快速安装gcc和gdb等工具,相对来说比较简单(可以通过Finder去搜索,苹果商场里面也是免费的),安装完成之后你可以通过Xcode->Preferences到达下面这个界面,只需将Command Line Tools安装即可。


2. Linux环境准备好了之后我们可以随手写一个main.cpp  代码如下:

#include <iostream>using namespace std;int main(){    cout<<"Hello yangw!"<<endl;    return 0;}

 写的代码极其简单,而且没有错误,大家有兴趣可以制造各种错误,我在此就不一一演示了,只说明用到的命令解决问题

 不管是简单的还是复杂的c++程序,多个目录也好,引用了第三方静态or动态库也好,你均会生成一个可执行的文件,gdb均能debug。

谨记:若你要使用gdb来调试你的代码,请在编译语句中均加上  -g  参数

例如上面我的编译过程如 g++ -c -g main.cpp

以下我以一问一答的形式来完成调试过程:

问:程序编译完成之后,gdb如何加载如程序中?

答:若你的可执行程序名为test,   则只需gdb test 即可进入;

问:进入之后如何启动程序?

答:输入命令 r 即可执行程序

问:如何设置断点了?

答: b  filepath:linenum    我比较习惯用这种, b即breakpoint的意思,后面跟文件名 冒号 和你要设置断点所在文件的行号

我在刚接触的时候设断点时遇到了问题,因为代码文件放置在不同的目录且有的还是so文件,这样怎么都设置不到,而查看断点信息又是有的,后来才发现是需要引入你设置断点的那个文件所在的目录需要包含进来,而如何包含呢?输入命令: dir 后跟你要设断点的文件所在路径,例如我要设的文件main.cpp在目录/usr/local/demon下,我只需要在gdb窗口中输入dir /usr/local/demon 即可引入该文件,注意so文件也是一样的,你会发现若你设置路径正确,当文件名很长的时候你可以通过tab键帮助你补全,我个人比较喜欢,跟在Linux下是一样的。

问:如何进行单步调试呢?

答:输入r启动之后当运行到你设置的断点处,程序会停住,等待你调试,单步调试请输入命令s, 即会深入到调用函数中,若你不想进入到底层,就输入命令n,程序即会逐行进行调试,遇到函数执行也只执行一步。


掌握了这些其实就可以自己调试自己的程序了,不用打日志去慢慢查找问题出现的位置了。


在Linux下进行c/c++程序开发,最常出现的就是段错误,还无从查起,若你有这样的问题,请把coredump打开,打开方式:

ulimit -c unlimited  我一般都是这样输入,无限制行数,当然若你的core文件太大的话可以限定行数,如只打印最近的1000行,即输入ulimit -c 1000

当你打开core开关之后,若你程序非正常关闭的话均会生成core文件,你就可以通过gdb去查看该文件找到问题所在。


如:输入 gdb ./test core12312   即gdb  启动你的程序方式   core文件名

进入到gdb之后输入where 或者  bt即可发现你是在哪里报错了,然后再去单步调试,写的比较简短,希望能帮助人也留下点足迹,嘿...








原创粉丝点击