gcc -g helloWorld.c -o helloWorld
gcc -g -ggdb3 helloWorld.c -o helloWorld
_____________________________________
app 带参数启动调试:
$ gdb -q --args helloWorld "OK"
//启动程序:
(gdb) start
//载入app:
$ gdb -q helloWorld
//设置参数
(gdb) set args "Messages2222"
//启动程序
(gdb) start
//打断点:
(gdb) break 12
(gdb) b 21
// 打临时断点:
(gdb) tbreak 27
// 按照函数名的正则表达式打断点:
(gdb) rbreak regex
//查看断点:
(gdb) info b
//删除断点:
(gdb) clear 12
(gdb) continue
(gdb) run
(gdb) until
(gdb) next
(gdg) step
// 打印变量值
(gdb) print x
// 暂停时,显示变量值,可指定格式
(gdb) display x
(gdb) display/t x
// 查看被display的变量
(gdb) info display
(gdb) disable display 2
(gdb) enable display 2
/fmt 描述
/x 以十六进制的形式打印出整数
/d 以有符号、十进制的形式打印出整数
/u 以无符号、十进制的形式打印出整数
/o 以八进制的形式打印出整数
/t 以二进制的形式打印出整数
/f 以浮点数的形式打印变量或表达式的值
/c 以字符形式打印变量或表达式的值
// 查看上下文代码
(gdb) list
// 改停:
(gdb) watch x
// 读停:
(gdb) rwatch x
// 读也停,改也停:
(gdb) awatch. x
// 显示watch points 信息:
(gdb) info watchpoints
//捕捉断点
(gdb) catch event
event 事件
描述
事件1,
throw [exception]
当程序中抛出某种类型的异常时,程序暂停,类型由 exception 指定;如果不指定异常类型,则程序抛出任何类型的异常时,都会暂停执行。
catch [exception]
当程序中捕获到某种类型的异常时,程序暂停,异常类型由 exception 指定。如果不指定异常类型,则程序捕获任何类型的异常时,都会暂停执行。
load/unload [regexp]
使用 regexp 表示所针对的动态库的名称,load 命令为动态库加载时程序会暂停执行;unload 命令 regexp 动态库被卸载时程序暂停执行。如果 regexp 参数省略,那么只要程序中任意动态库被加载或卸载,都有导致程序暂停执行。
// 抛出 int 型异常
(gdb) catch throw int
// 捕获 int 型异常
(gdb) catch catch int
(gdb) up
// load时暂停
(gdb) catch load libstdc++.so.6
(gdb) up
// 条件普通断点
(gdb) break if cond
// 条件观察断点
(gdb) watch expr if cond
// 条件捕获断点
(gdb) catch expr if cond
//改变3中类型断点的条件
(gdb) condition bnum expression
// 删除3种类型断点的条件
(gdb) condition bnum
// 具体,将第1个断点的条件改为 i==3,这个断点可以是三种中任何类型的断点:
(gdb) condition 1 i==3
// 具体,将第2个断点的条件删除
(gdb) condition 2