GDB调试器的学习(一)

linux下程序的调试感觉不太方便,没办法,硬着头皮也要弄一下了。主要参考书籍:

  • 《软件调试实战》
  • 《软件调试的艺术》
  • 《Debug Hacks中文版——深入调试的技术和工具》

其中第三本较为实用,但较之前两本稍显复杂,前两本适合快速入门。


ulimit -c查看我们是否开启了调试,显示0表示没有开启。

ulimit -c unlimit表示不限制内核转储文件的大小。

这里我们首先创建一个会造成core dump的c文件。我这里是null_pointer_gdb.c代码如下:

#include<stdio.h>

int main(void)
{
	int *a = NULL;
	*a = 0x1;

	return 0;
}

然后编译

gcc -g -o null_pointer null_pointer_gdb.c

  -g表示生成调试信息

执行编译好的文件

./null_pointer

 就会生成core文件了一般和可执行文件放在一个目录中。

要用GDB调试生成的转储文件用指令

gdb -c core.7569 ./null_pointer

参数是core文件和可执行文件

2.gdb调试可执行文件

gcc -Wall -O2 -g null_pointer_gdb.c

gdb a.out


3.断点调试

break main(在main函数处添加断点)(缩写:b main)

break 13(在13行添加断点)(缩写:b 13)

info break (查看断点信息)(缩写:i b)

run(启动调试)(缩写:r)

4.步进,step-over与finish

step单步调试(缩写:s)

next(执行到函数调用后的那一行,不进入调用)(缩写:n)

finish(单步进入后,快速从调用中退出来)(缩写:fin)


后记

GDB 传入命令行参数

start learn10.pcd

continue

===================2018.06=========================

微信_机器人学家_GDB的快速入门

基本 

  •  

从头开始运行程序直到断点。在一次debug中你可以通过用 r 来多次重新运行程序,而不必重新rosrun 或 roslaunch. 

  • q 

退出debug。 


查看代码/导航 

  • l 

列出当前所在文件的前10行。 

  • l 50 

列出当前所在文件从第50行开始的10行。 

  • functionName 

列出当前所在文件从某函数开始的10行。 

  • bt 

Backtraces”,列出调用堆栈。 

  • up/down 

在堆栈中向上/向下移动一级。可以简写为u和d 


查看/修改内存 

  • p x 

相当于“print x”。显示当前变量 x 的值。 

  • x address  

查看指针所指位置的值。 

  • set x = 12 

  • set x = y 

修改变量x的值。 

  • call function() 

调用某函数。这个函数可以是你程序里定义的函数,甚至是标准库函数,我的理解是只要在当前位置可访问到的函数都可以调用。这是一个极其有用的功能,生生把c++用成Matlab 。 

  • display x 

和print的区别是,x不是只显示一次就消失,而是一直显示,每次继续运行程序都会刷新。相当于VS的“watch”功能。 

  • undisplay x 

停止对变量x的display。  


断点 

  • b 

b即break。在当前行设置断点。 

  • b 45 

  • functionName 

在某行/某函数开始处设置断点。常用:b main 在程序开始设置断点。 

  • watch x == 3 

设置条件断点。这个比VS的条件断点更方便,因为它不需要设置在哪一行!时刻监控! 

  • info break 

查看当前存在的所有断点。每个断点都有自己的编号。 

  • delete N 

删除编号为N的那个断点。 


调试运行 

  • n 

“next”。运行一行代码。 相当于VS的step over。 

  • s 

“step”。运行一个指令。相当于VS的step in。 

n和s都可以一次运行多行,比如n 5 

  • c 

“continue”。继续运行直到下一个断点。 

  • f 

“finish”,运行完当前程序。相当于VS的 step out。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yaked19

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值