用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> 设置显示结构体时,是否显式其内的联合体数据。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。