一些常用的 gdb 使用命令备忘。
thread
用法:thread xx。切换当前活动线程。用于调试多线程程序。xx 为线程号,用 info thread(th)查看,每个线程的第一个数字就是线程号。
watch
硬件写断点。这种断点和普通的 break 有点不同,需要每次挂载 gdb 后,先利用普通的 break 让程序停下来,然后查看出你要查看变量的地址(用p)。然后再用 watch 命令设置。然后每次程序重新运行都要重新设置,因此每次变量地址的都不一样。
p
这个命令平时用来显示一些变量的值。其实它还有一个功能就是执行函数。调试 MiniGUI 的时候,最典型的用法用法就是可以将你想查看的一些 memdc 中的图像信息输出到屏幕上进行检查。方法是调用 BitBlt ,注意这种情况一些宏定义的变量无法直接使用,而是要填入真正的数值,这些可以从代码里面去差。例如先把屏幕一块地方填充成红色,然后再把 memdc 中的内容输入到屏幕的这个地方:// SetBrushColor(hdc, color) 的宏定义是 SetDCAttr(hdc, DC_ATTR_BRUSH_COLOR, color) // DC_ATTR_BRUSH_COLOR 值就是2 // HDC_SCREEN 的值就是0 // 如果自己知道 rgb 对应的 pixel 值的话,也可以不用 RGB2Pixel p SetDCAttr(0, 2, RGB2Pixel(0, 255, 0, 0)) p FillBox(0, 400, 0, 360, 480) p BitBlt(memdc, 0, 0, 0, 0, 0, 400, 0, 0)
查看 coredump 文件
首先要让程序在崩溃的时候产生 coredump 文件。输入 ulimit -c unlimited 命令(注意这个只对一个终端有效)。然后在程序崩溃的时候,就会产生 core.xx 的文件。使用 gdb app core.xx 命令查看(app 就是产生 core.xx 的程序)。然后就和普通的 gdb 用法一样了,用 bt 查看崩溃时的堆栈信息啊,但是就是不能执行而已。
1433

被折叠的 条评论
为什么被折叠?



