用GDB调试程序
1、模拟step into,使用step(s)。进入函数体内。
2、模拟step over,使用next(n)。不进入函数体内。
3、模拟step out,使用finish。退出当前函数体。
4、模拟退出循环,使用until(u)。退出当前循环体。
5、模拟下断点,break(b) function或者linenum或者filename:linenum或者filename:function。
6、模拟删除断点,delete break + 断点号。
7、模拟查看当前断点,info break,能够看到断点号。
8、模拟运行,run(r)。程序刚开始执行时使用。
9、模拟继续运行,continue(c)。继续运行直到下一个断点。
10、打印变量或者表达式
(1)、print(p) + 变量或者表达式。
(2)、print(p) + 格式 + 变量或者表达式。
(3)、如果全局变量和局部变量重复,查看全局变量,使用文件名:全局变量。
如果是静态数组,直接打印数组名字,就能看到数组中的元素。
int *array = (int *) malloc (len * sizeof (int));
如果是动态数组,p *array@len。
11、查看内存
x/<n/f/u> + 内存地址。
12、自动显示
(1)、display + 变量或者表达式。
(2)、display/fmt + 变量或者表达式。
(3)、display + 内存地址。
(4)、info display ,查看所有自动显示。
(5)、delete display + 自动显示号。
13、查看源代码在内存中的地址,info line “行号”,“函数名”,“文件名:行号”,“文件名:函数名”。disassemble + “函数名”或者“文件名:函数名”,反汇编函数。
14、查看所有寄存器的信息,info all-registers。
15、列出当前代码,list(l)。
16、列出当前调用堆栈,backtrace(bt)。
17、set print pretty <on/off> 如果打开printf pretty这个选项,那么当GDB显示结构体时会比较漂亮。
18、print union <on/off> 设置显示结构体时,是否显式其内的联合体数据。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。