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以排列好的格式打印出来,比如
在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
(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
相关文章推荐
- 题目1180:对称矩阵
- 个性域名时代,.COM还有人爱吗?
- 乐观锁与悲观锁
- 天澤履 (易經大意 韓長庚)
- 有状态,无状态对象是什么概念
- Vijos 1061
- HTML表单、HTTP Get与Post杂谈
- linux stat 命令查看文件信息
- struts2中使用拦截器(Interceptor)控制登录和权限
- VMware Bridged NAT Host-only 区别
- 在Android应用中使用自定义证书的HTTPS连接(下)
- 开机时提示memory for crash kernel
- USACO Number Triangles
- 关闭sendmail服务
- python decorator 计算程序时间
- LeetCode 041 First Missing Positive
- UVa 11292 Dragon of Loowater
- 关于光速(c)测定的故事
- CDLinux 自动休眠功能的关闭方法
- JavaScript 禁用键盘按钮