当前位置:Gxlcms > 数据库问题 > 利用GDB对程序进行调试

利用GDB对程序进行调试

时间:2021-07-01 10:21:17 帮助过:2人阅读

 

第一章初涉调试会话

调试工具

  • GDB

Unix下最常用的调试工具

 

DDD

基于GUI的调试器,大多数工具都是GDB的GUI前端。

 

Eclipse

IDE也是一种调试工具

atoi( )把字符串变为整数,头文件是include<stdlib.h>

 

gcc -g -Wall -o insert_sort ins.c

-g选项可以让编译器将符号表(对应于程序的变量和代码行的内存地址列表)保存在生成的可执行文件里中。

 

这样才能在调试会话的过程中引用源代码中的变量和行号,比如“在第30行停止”或者“输出x的值”。

 

gdb insert_sort -tui 可以在调试的时候显示源代码

 

可以用Ctrl+X+A来打开或者关闭源代码的窗口

 

run + 参数运行程序

 

Ctrl+C可以停止程序,开程序结束在那一行

然后continue,再看看程序结束在那一行

 

$1是GDB输出的第一个值,$2、$3等表示的值统称为调试会话的值历史。

 

break 30 if num_y==1

clear命令用来删除断点

clear 30

 

info break用来查找设置的端点

 

break 36

cond 3 new_y==19

 

next和step都是单步调试,如果没有在函数中设置断点,next不会进入到函数中,而step会进入到函数中

 

第二章停下来环顾程序

gdb符号调试器,可以暂停程序的执行,暂停以后,调试器提供了变量检查、跟踪执行路径等机会。

 

暂停机制

断点:breakpoint

监视点:hw watchpoint

捕获点:catch fork

一开始这三个都被称为断点

 

GDB中关于位置的含义非常灵活,它可以指各种源代码、代码地址、源代码文件中的行号或者函数的入口等。

 

GDB断点停止的那一行并不是最后执行的代码,而是将要执行的下一行的代码。

GDB工作针对的是机器语言指令,然而可以使用源代码行,是因为可执行文件包含了额外的信息。

 

跟踪断点

 

创建断点时GDB会告知你分配给该断点的编号。

info breakpoints可以查看断点

delete 1 3 4

可以删除断点1,监视点3及捕获点4

 

在GDB中设置断点

 

break function,在函数function的入口,第一行可执行代码处设置断点

 

break line_number,在当前活动源代码文件的line_number处设置断点

break filename:line_number,如果filename不在当前工作目录中,则可以给出相对路径名

 

tbreak foo.c:10,这个设置的是临时断点

 

GDB设置的断点位置可能与请求将断点放置位置不同。

在调试完成之前永远不应当优化代码。

如果同一行源代码有多个断点时,只会有一个断点触发中断,而且出发中断的点将是标识符编号最小的点。

 

 

第三章 检查和设置变量

 

第4章 程序崩溃处理

 

第5章 多活动上下文中的调试

 

第6章 特殊主题

第7章 其他工具

利用GDB对程序进行调试

标签:

人气教程排行