利用GDB对程序进行调试

第一章初涉调试会话

调试工具

  • 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章 其他工具

时间: 2024-10-24 17:54:13

利用GDB对程序进行调试的相关文章

3、利用GDB进行程序调试

本文将用一个实际例子讲解如何通过GDB进行程序调试. 首先,我们需要理解的是GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,其产生和调试的目的是让调试者知道,程序在执行时内部发生了什么,或者运行过程中在做什么,一般来说,GDB主要帮助实现以下四个方面的功能. 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式)    3.当程序被停住时,可以检查此时你的程序中所发生的事.    4.动态的

学习4412开发板gdb和gdbserver的调试

因为有很多的小伙伴是从单片机转过来的,用惯了单片机上的JLINK调试程序,换到Linux上非常的不习惯.确实,如果能设置断点,单步调试,查看变量,那确实是太爽了,那么在我们的Linux可以做到吗,答案当然是可以的. 在之前的文章中,对gdb调试做过一期简单的介绍番外篇|使用gdb对程序进行调试,但是之前的文章我们是在ubuntu上对应用程序进行的调试,不是在ARM板上进行的调试,相对于其他的软件开发,嵌入式软件的调试手段比较有限,我相信一定有很多人的调试手段依然是使用最原始的打印的办法.这一期我

linux 下C/C++程序常用调试方法(gdb)

 不管是在开发或者运行过程中,调试保证程序正常运行最基本的手段,熟悉这些调试方式,方便我们更快的定位程序问题所在,提高开发效率. 一 程序正常运行调试 (1)  直接使用gdb 开发过程中最常用的方式,我们可以在其过程中给程序添加断点,监视等辅助手段,监控其行为是否与我们设计相符,比如: (2)      程序已经运行,通过attach附加到进程 二 程序中断后调试 首先简单介绍下linux 下的信号: 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.进程之间可以互相通过

gdb动态挂运行程序并调试

/* * gdb动态挂运行程序并调试 * 编译程序: * gcc gdb_attach2.c -o gdb_attach2 -g * * 运行程序: * ./gdb_attach2 * * 查看程序进程代号: * ps ax | grep gdb_attach2 * 3973 pts/0 S+ 0:00 ./gdb_attach2 * * 启用gdb挂载程序: * gdb gdb_attach2 3973 * * 在目标位置设置断点 * b gdb_attach2.c:44 * Breakpoi

Linux下C++的编程——GDB进行程序调试

GDB简介 我们在Linux下C++的编程--开偏介绍一文中已经简单介绍了GDB的功能,是类Unix系统的主要调试工具,可进行断点调试,跟踪程序,动态改变执行环境等功能. 从一个程序开始调试 下面我们就从一个程序开始讲解一下GDB的简单用法.假设我们有如下的程序: GDBTest1.cpp #include <iostream> int Accumulation(int n) { int result = 0; for(int i = 0; i < n; i ++) { result +

20145311利用gdb调试汇编代码

利用GDB调试汇编代码 首先编写c语言原代码,我使用的是同学分析过的代码 #include<stdio.h>short addend1 = 1;static int addend2 = 2;const static long addend3 = 3; static int g(int x){    return x + addend1;} static const int f(int x){    return g(x + addend2);} int main(void){    retur

利用GDB在远程开发机进行调试

由于一些环境的制约,很多同学都可能需要在开发机上进行调试,但由于开发机资源的限制,在开发机上直接进行本地的GDB环境配置就成了难题,这个时候其实我们可以利用GDB中自带的gdbserver工具就可以进行远程开发机的调试. gdbserver可以走网络,串口等通信机制,对于网络来说支持ip:prot格式运行.比如你的开发机所在IP是192.168.3.11,你的机器是192.168.3.1,这个时候你首先先下好GDB的源码,然后进入到gdb_src/gdb/gdbserver目录下进行./conf

转 利用 Console 来学习、调试JavaScript

利用 Console 来学习.调试JavaScript 一  什么是 Console Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该对象 可以输出信息到 Console 窗口中. 二  什么浏览器支持 Console 很多人可能都知道 Chrome 和 FireFox(FireBug)中都支持 Console.而其他浏览器都支 持不好.比如 IE8 自带的开发工具虽然支持 Console,但功能比较单调,显示对象的时候都是显

一起talk GDB吧(第六回:GDB改动程序执行环境)

各位看官们,大家好,上一回中我们说的是GDB查看信息的功能,而且说了怎样使用GDB查看程序执行时的 信息.这一回中,我们继续介绍GDB的调试功能:改动程序执行环境.当然了,我们也会介绍怎样使用GDB 改动程序执行环境. 闲话休提.言归正转. 让我们一起talk GDB吧! 大家都知道程序执行时须要一个执行的环境.比方从系统中分配内存,让程序读取一些数据等等.我们接 下来说一说,怎样改动程序的执行环境.这样能够让程序依照我们我要求来执行.在改动程序执行环境中 最经常使用的是改动变量的值. 作为一款