您的位置:首页 > 其它

gdb常用调试命令汇总!

2014-02-02 10:22 316 查看
在debug模式下,使用GDB进行调试,可以使用的命令汇总如下:

(gdb) bt full 相比bt能显示更详细的局部变量信息

(gdb) b hookfactory.cpp:173 在源文件指定行数处加断点

(gdb) b main.cpp:MURLProc 在源文件指定函数处加断点
(gdb) b CHttpClient::initialize() 在指定类名的成员函数处加断点

(gdb) l 直接在当前stack frame中查看当前函数的代码,比较直观

(gdb) info b 列出所有断点信息,包括Address,Type,description

(gdb) disa 1 禁用断点

(gdb) info b[1] 列出第一个断点的信息

(gdb) delete all 删除所有断点信息

(gdb) frame 8 or f8 查看第8层栈帧的函数调用,包括其中的局部变量

(gdb) set print elements 0 设置打印完整字符串信息,不然,未打印出的字符串会显示“...”符号

(gdb) p *(CModuleInfo *)gMainConfig.modules[i] 查看复杂的结构体信息

(gdb) p *obj.m_alt 正常显示结构体的信息

(gdb) p info->m_ua_req_hdr.length() 计算函数表达式

$9 = 342

(gdb) p *this 打印当前对象中各成员的值

(gdb) p this->f 打印出指定成员f的内部信息

(gdb) p *(char *)p 对void*类型的指针p,转换类型后查看它的地址,使用p *p会出错

(gdb) f 打印函数

(gdb) set print pretty on 以整洁的格式显示,而非显示一整行

(gdb) p so 将类或结构体so以排列好的格式打印出来,比如

$2 = {
num = 0,
link = {
next=0x400530
}
}
(gdb) set print element 0 完整显示字符串的值,没有省略号...



在gdb环境中按快捷键cTRL + X + A,弹出源码窗口,再次按该组合键后恢复原状.



下面是补充:

1. 调试core dump文件时,可以用frame查看堆栈的某个位置(当然gdb调试也可以)。这样可以看到其他位置的变量,而不仅仅是出错的那个地方。

2. 自定义函数,譬如我需要频繁的执行c然后bt,可以定义个函数:

[plain] view
plaincopy

(gdb) define doit

>c

>bt

>end

然后执行这个函数就好了:

(gdb) doit

然后不断回车就可以了。

3.可以用x查看内存信息,譬如查看128个字节:x /128xb data_ptr,可以看到指针data_ptr的128个字节的内存信息。

Here is an example. If a program says

int *array = (int *) malloc (len * sizeof (int));

you can print the contents of array with

p *array@len
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: