1.1 gdb 调试工具常用命令

  • list:展开调试的源代码,缩写 l;
  • break:设置断点,缩写为 b;
  • info break:查看断点信息,缩写为 i b
  • delete:删除断点
  • print:打印变量的值,缩写为 p;
  • run:程序开始运行,缩写 r,在 r 后可以加入程序启动启动参数,程序运行到断点处暂停;
  • step:单步调试,可以进入子函数,缩写为 s;
  • next:单步调试,不进入子函数,缩写为 n;
  • continue:程序继续运行,,到下一断点处暂停,缩写为 c;
  • set args:设置运行参数
  • show args:查看运行参数
  • gdb attatch pid:加载运行中的进程进行调式
  • dir dirname ... :指定源目录
  • x/28hx ---:以十六进程输出内存块数据
  • kill:停止调试
  • 段错误调试:
    • 通过 ulimit 命令查看一下系统是否配置支持了 dump core 的功能。通过 ulimit -c 或 ulimit -a,可以查看 core file 大小的配置的情况,如果为 0,则表示系统关闭了 dump core;可以通过 ulimit -c unlimited 来打开。若发生了段错误,但没有 core dump,是由于系统禁止  core 文件的生成。
    • gdb [exec file] [core file] | gdb -c corefile execfile
    • backtrace:查看堆栈信息,缩写为 bt,注意 run 到出错的地方后,运行此命令,可以查看到错误的地方
    • frame 堆栈错误编号:切换到编号处堆栈
    • 之后用 gdb 的通用调试命令查看参数等

1.2 例子

  swap.c

 #include <stdio.h>

 void swap(int *a, int *b);
void swap_error(int a, int b); int main(void)
{
int i = ;
int j = ; printf("i: %d, j: %d\n", i, j);
swap(&i, &j);
printf("i: %d, j: %d\n", i, j); return ;
} void swap(int *a, int *b)
{
int c = *a;
*a = *b;
*b = c;
} void swap_error(int a, int b)
{
int c = a;
a = b;
b = c;
}

  编译出目标文件(.o 文件): gcc -c -g -Wall swap.c

  编译出可执行文件:gcc -g -o app swap.o

  运行:gdb app

  运行 list 命令可以列出源码:

  

  list 后可以加函数名,列出函数,如 list main、list swap

  设置断点, break main(或者使用 break swap.c:main(或行号)) 和列出断点信息 info break,也可以通过 b 行号 设置断点

  

  运行程序,run(r) 命令:

  

  运行到下一行,next(n)命令:

  

  打印 i 的值,print(p) i:

  

  打印 i 的地址,p &i:

  

  进入子函数,step(s)命令:

  

  打印 a:

  

  a 的值与 i 的地址一样,即 a = &i

  删除断点,delete 断点标号:

  

  

    

  

  

一、C语言调试—— gdb 的使用的更多相关文章

  1. GDAL库调试(包括跨语言调试)

    很多时候都需要调试GDAL库,尤其是像学习GDAL库中的某些算法是如何实现的时候,调试就必不可少了. 首先说明用C++的调试.以VS2008为例进行说明. 编译DEBUG版本的GDAL库,这个可以参考 ...

  2. linux-c 调试 gdb

    GDB(GNU Debugger) gcc -g –o testarg testarg.c //可执行文件中带上调试信息,用于后续的gdb调试 gdb testarg l; list //显示源程序 ...

  3. Linux下C语言的调试 - gdb

    调试是每个程序员都会面临的问题. 如何提高程序员的调试效率, 更好更快地定位程序中的问题从而加快程序开发的进度, 是大家共同面对的问题. 可能Windows用户顺口就会说出:用VC呗 :-) , 它提 ...

  4. c语言之gdb调试。

    1.此文档演示如何使用gdb调试c语言代码. 代码如下: #include <stdio.h> /*函数声明*/ void digui(int n); int main() { ; dig ...

  5. C语言调试器GDB和LLDB的使用方法

    调试器的使用 编译输出带调试信息的程序 调试信息包含:指令地址.对应源代码及行号 指令完成后,回调 LINUX使用GDB MAX使用LLDB 使用说明 // 开始调试testlib程序 lldb te ...

  6. c语言,gdb

    Get gdb call stack http://blog.csdn.net/zoufeiyy/article/details/1490241 Debugging with GDB - Examin ...

  7. linux下的C语言开发 GDB的例子

    在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正 ...

  8. C 调试 gdb常用命令

    gdb常用命令: [root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) b ...

  9. C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

随机推荐

  1. Bootstrap -- 插件: 提示工具、弹出框、 警告框消息

    Bootstrap -- 插件: 提示工具.弹出框. 警告框消息 1. 提示工具(Tooltip)插件:根据需求生成内容和标记. 使用提示工具: <!DOCTYPE html> <h ...

  2. hashtable 简单介绍

    Hashtable 1 注意小写 table 2 常用方法 void                clear() boolean             contains(Object value) ...

  3. June. 26th 2018, Week 26th. Tuesday

    No affection but interests can be found in the world of animals. 在动物的世界里,只有利益,没有感情. From Animal Worl ...

  4. python+selenium运行时,提示元素不可见

    python+selenium运行多次新增项目脚本(出错的元素通过by_id的方式定位),当第三次新增时报Message: element not visible的错误,加入等待时间,等页面加载完成, ...

  5. ASP.NET Core 下自定义权限验证

    效果图: 如果没有权限时,显示: 代码: public class AuthorizeAdminAttribute : TypeFilterAttribute { #region 字段 private ...

  6. Pandas 数据清洗常用篇

    一.缺失值 sklearn中的preprocessing下有imputer,可进官方文档参考.这里主讲pandas. 拿到数据,一般先检查是否有缺失值,用isnul()或notnull(). 再决定d ...

  7. python基础杂记

    一.编码 1.ACSII                        0000 0001           8位       一个字节 2. uncoide                     ...

  8. java网络编程基本知识

    1.基本概念 网络:一组相互连接的计算机,多台计算机组成,使用物理线路进行连接 网络连接的功能:交换数据.共享资源 网络编程3要素: IP 地址:唯一标识网络上的每一台计算机,两台计算机之间通信的必备 ...

  9. 揽货最短路径解决方案算法 - V2(增加了时间维度-客户允许的服务时间段,C#/JAVA同步实现,带python作图)

    继上篇,这里改进增加了客户允许服务的时间范围这个维度,并且把C#版本翻译成java,加强了更加形象的图表展示路径(继续是用python的matplotlib作图). 这里的时间范围维度是指:每个客户都 ...

  10. zoj 3601

    链接 [https://vjudge.net/contest/293343#problem/B] 题意 就是n男m女.然后给出他们喜欢那些人 再给出q次询问 每次参加party的人 让你找出某个人满足 ...