gdb带参数调试

从网上找到的资料,整理一下。

实验

gdb带源码调试, 给被调试程序带上参数.
给gdb带上-tui参数,有dos调试器的感觉,很喜欢:)

修改变量值

bool b_rc = false; // 源码的内容

// 在gdb中修改变量值
(gdb) set variable b_rc = true

在gdb中用16进制显示变量的内容

p/x var

如果p 不带参数,就是按照10进制显示变量内容

p var

用gdb附加调试进程

先将工程编译成debug版,换到目标目录正常运行起来.
进入到工程源码目录, 运行以下下命令, 然后设置合适的断点, c跑起来,等待断点命中。

gdb -tui -p the_obj_pid

条件断点

如果要断在循环内的某个条件,下条件断点实用。

break 435 if i > 29
break 86 if (true == b_find)

运行中修改变量值

如果在一个循环中,要改变条件,跳出循环。那修改循环次数就很实用。

set i = 100
p i

打印一个结构指针

(gdb) p	pw
$4 = (const struct passwd *) 0x611470
(gdb) p	* pw
$6 = {pw_name = 0x612250 "root", pw_passwd = 0x6113d0 "x", pw_uid = 0, pw_gid = 0, pw_gecos = 0x6113f0 "root", pw_dir = 0x610010 "/root", pw_shell = 0x610030 "/bin/bash"}

断点断住后,刷新gdb窗口

refresh

gdb带窗口调试的命令

gdb -tui --args ./myprog para1 para2 para3
(gdb) break main
(gdb) run
(gdb) display argc
3: argc = 4
(gdb) display argv[0]
1: argv[0] = 0x7fffffffedb1 "/home/lostspeed/test/src/myprog"
(gdb) display argv[1]
2: argv[1] = 0x7fffffffedd4 "para1"
(gdb) display argv[2]
4: argv[2] = 0x7fffffffedd7 "para2"
(gdb) display argv[3]
5: argv[3] = 0x7fffffffedda "para3"

当在gdb中被调试程序结束后,或调试到中间,想从头开始完,可以在gdb中直接从头开始带参数调试。

(gdb) run /home/lostspeed/test/src/myprog param1 param2 param3

将gdb当作一个计算器

(gdb) print 9224
$6 = 9224
(gdb) print /x 9224
$6 = 0x2408
(gdb) print /x (9224 + 1)
$7 = 0x2409

设置断点

break 文件名:行号

break x.cpp:56

break 函数名

break main

当断点命中后,如果要继续跑到下一个断点,执行continue命令.

删除断点

clear 文件名:行号

clear x.cpp:298

重复上一次的命令执行

在单步时,经常需要输入n + 回车.
gdb如果没有输入命令回车时,执行的是上一次的命令。
这样在单步时,就方便了。只需要输入一次n +回车,如果不需要跟进函数(s), 就一直按回车就可以单步程序流程了.

跳出函数

如果不小心按s键步入了一个不关心的函数,可以输入finish+回车,返回上一级函数。

查看内存值

按照16进制打印缓冲区
x/[要打印的字节数量][显示格式(单字节,双字节,4字节,8字节)] 内存地址或变量名称

x/16ba p_my_data

ref

GDB 进行调试 使用心得
http://www.cnblogs.com/shipfi/archive/2008/08/04/1260293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值