对于很多场景,很多分支的代码逻辑,在进行联调和搭真实环境来测试的之前,是有必要先自测的,这样各种各样的场景和分支,落到代码上就是一个一个变量的值或者函数的调用顺序的各种搭配,用gdb调试能很容易修改变量值和函数的调用顺序,特别适合自测的时候。总结了以下几个gdb的命令来帮助做各种场景,逻辑的测试:
(gdb)print x=2 ---->把变量x的值变为2
(gdb)set var x=2 ---->把变量x的值变为2,如果当x是gdb的参数的时候,可以用set var 告诉gdb,要改变的是程序的变量x,而不是gdb的参数x
(gdb)return thread_func --->从函数thread_func 返回
(gdb)signal 15 ---> 给正在运行的被gdb 调试的进程发送信号15, 如果在外面用kill 15 的话,信号是发到gdb进程了
(gdb)print thread_func ---> 强制执行函数thread_func
用gdb调试的时候一不小心走过了某个函数就要从头开始,这时候设置的断点等又得重新全部设置,这个时候可以把设置断点,set follow-fork-mode child 这些在gdb 里面运行的命令,可以放到脚本里,如果脚本在gdb 运行的目录,并且命名为.gdbinit ,则gdb 运行的时候会自动去读取这个脚本,也可以命名为任意你的想要的名字,这个时候,只需要在gdb里面source 路径+脚本名字就可以把脚本的命令全部执行一遍,例子:
可执行文件名称:test ,所在路径/home/demo
脚本名称:gdbscript ,所在路径/home/demo
脚本内容:
b main
b foo1
b foo2
set follow-fork-mode child
r
直接运行gdb test ,然后在gdb 里面source gdbscript 就可以了,要是脚本不在当前目录下,添加上路径即可,通过下图,可以看到source gdbscript 之后脚本里面的命令都被执行了,
如果不想在gdb 里面再运行一遍souce gdbscript的话,就把脚本名字改成.gdbinit ,并放在当前目录,因为gdb 启动的时候默认会去当前目录寻找.gdbinit 这个脚本的,所以这个时候,直接gdb test 也是会执行脚本里面的命令的,如下图:
阅读(1918) | 评论(0) | 转发(0) |