启动GBD调试程序

gbd ./test.cpp

如果想要带参数的话则使用

gdb –args test.cpp 1 2 3

 

运行调试程序

运行到第一个断点 run 或者 r

有参程序要提前设定参数 set args 1 2 3

显示传入的参数 show args

 

 

断点设置

break可以缩写为b

在函数入口处设置断点 break {function_name}

在指定行设置断点 break {filename:linenum} (在非多文件编译的情况下filename可以省去)

程序中各行代码都有对应的行号,可通过执行 l(小写的 L)命令看到

查看断点 info breakpoints

清除指定断点 clear {filename:linenum} (如果省去{filename:linenum} 则会清除所有断点)

条件断点 break test.cpp:20 if i == 5 

 

观察操作

观察变量 watch x

显示变量值 print x

程序停止时显示x的值 display x

查看x的数据类型 whatis x

修改变量的值 set variable x = 5 

 

 

执行操作

捕捉点 catch throw (用于发生特定事件比如抛出异常时停止程序)

单步进入 step 或者 s (用于查看函数内部发生的过程)

继续执行 continue 或者 c

单步执行 next 或者 n

跳转执行 jump {location}

执行完当前函数 finish

执行完当前函数并指定返回值 return (作用相当于直接在代码的当前位置插入一个return 还能指定返回值)

下一步 until (作用同next 但是在对循环体尾部使用时直接把整个循环体执行完,可以把意思理解为执行到下一行为止)

 

 

信号命令

我们可以通过signal {signal}来向程序发送信号

nostop : 程序不停止运行但告诉你收到这种信号

stop : 程序停止

print : 显示一条信息

noprint : 不显示收到信号的信息

pass、noignore : 交给调试程序处理

nopass、ignore : 不让调试程序处理信号

详情看 https://blog.csdn.net/qq_28351609/article/details/114855630?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170688955916800188580834%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170688955916800188580834&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-114855630-null-null.142^v99^pc_search_result_base3&utm_term=gdb%E8%B0%83%E8%AF%95%E5%91%BD%E4%BB%A4&spm=1018.2226.3001.4187

 

 

shell命令

输入shell进入shell命令行

退出shell返回到gdb : exit

在gdb的命令行中,可以使用!前缀来执行shell命令。exp: !ls 查看当前目录下的文件