gcc 安装指定版本:http://un-halt.com/archives/422
首页 | 归档 | 分类 | 标签 | 关于 |
|
gcc 安装指定版本:http://un-halt.com/archives/422
gdb 通过 watch
命令设置观察点,也就是当一个变量值发生变化时,程序就会停下来。
1 | // code |
如上代码和调试结果,当 a 的值发生变化时,程序就会停下来。也可以使用地址来监测:watch *(int*)0x555555755014
1 | (gdb) p &a |
使用 tcatch
命令设置 catchpoint
只触发一次。如下:tcatch fork
1 | // code |
程序只在第一次调用 fork 时暂停
使用 catch
设置 catchpoint,比如:catch fork
。每次调用 fork 都会暂停
在 gdb 中,如果要打印大数组的内容,缺省最多会显示 200 个元素。
可以使用:(gdb) set print elements number-of-elements
设置这个最大限制数
(gdb) set print elements unlimited
或者 (gdb) set print elements 0
设置为没有限制。
1 | // code |
使用 info functions
命令可以列出可执行文件的所有函数名称。此命令也支持正则表达式,如:info functions regex
只会列出符合正则表达式的函数名称。
1 | (gdb) info functions printf* |
使用 gdb 调试遇到函数时,使用 step(缩写为 s) 命令可以进入函数(函数必须有调试信息)。
可以使用 next(缩写为 n)不进入函数,gdb 会等函数执行完,再显示下一行要执行的程序代码
本文通过实践来说明 gdb 如何调试多线程。
如下的程序我们在主程序中先创建两个线程,这两个线程分别打印自己的线程 ID。
1 | void* pthread_run1(void*) { |
我们可以通过 ps -eLf | grep xxx
来查看进程 ID 和 线程 ID。或者通过 pstree -p 主线程id
查看主线程和子线程之间的关系。