调试 nccl 01 记 —— 罗列 gdb 常用的命令


gcc   -g   helloWorld.c    -o  helloWorld

gcc   -g -ggdb3   helloWorld.c    -o  helloWorld
_____________________________________

1. 基础调试命令


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

2. 断点调试命令

// 改停:
(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


 

你可能感兴趣的:(gdb,NCCL)