一、C语言调试—— gdb 的使用

时间:2022-09-03 13:03:41

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 命令可以列出源码:

  一、C语言调试—— gdb 的使用

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

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

  一、C语言调试—— gdb 的使用

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

  一、C语言调试—— gdb 的使用

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

  一、C语言调试—— gdb 的使用

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

  一、C语言调试—— gdb 的使用

  打印 i 的地址,p &i:

  一、C语言调试—— gdb 的使用

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

  一、C语言调试—— gdb 的使用

  打印 a:

  一、C语言调试—— gdb 的使用

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

  删除断点,delete 断点标号:

  一、C语言调试—— gdb 的使用

  

    

  

  

一、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. xampp 下安装mysql-python

    pip install mysql-python修改路径PATH="$PATH":(/mysql/bin 路径)brew install mysql-connector-c

  2. linux中shell变量&dollar;&num;&comma;&dollar;&commat;&comma;&dollar;0&comma;&dollar;1&comma;&dollar;2的含义解释&lpar;转&rpar;

    变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览  ...

  3. kuangbin&lowbar;ShortPath S &lpar;POJ 3169&rpar;

    被cow类题目弄得有些炸裂 想了好久好久写了120多行 依然长跪不起发现计算约束条件的时候还是好多麻烦的地方过不去 然后看了看kuangbin的blog 都是泪啊 差分约束的方式做起来只要70多行啊炒 ...

  4. QT GUI &commat;创建新的工程

    开发环境: Qt 4.5 Qt Creator 1.3.0 新工程创建步骤: 1. 单击运行Qt Creator,进入欢迎页面.选择"File" -> "New F ...

  5. C&num; 之 System&period;Object

    System.Object     C#中全部的类都直接或间接继承自System.Object类,这使得C#中的类得以单根继承.假设我们没有明白指定继承类,编译器缺省觉得该类继承自System.Obj ...

  6. sql 表名为关键字

    user在sql server中时一个关键字,如上面说所的,有时候我们无意中将其作为表的名称,当我们在sql语句中要使用该名称时例如:select *from user这是会提示user附近有语法错误 ...

  7. js中arguments

    arguments 每天一对象,JS天天见,今天我们来看看arguments对象及属性.arguments对象不能显式创建,arguments对象只有函数开始时才可用.函数的 arguments 对象 ...

  8. 在WinForm应用程序中快速实现多语言的处理

    在国际化环境下,越来越多的程序需要做多语言版本,以适应各种业务需求的变化.在Winform应用程序中实现多语言也有常规的处理方式处理,不过需要针对每个语言版本,重新修改Winform界面的显示,对一些 ...

  9. 探究functools模块wraps装饰器的用途

    <A Byte of Python>17.8节讲decorator的时候,用到了functools模块中的一个装饰器:wraps.因为之前没有接触过这个装饰器,所以特地研究了一下. 何谓“ ...

  10. zoj 3659 第37届ACM&sol;ICPC 长春赛区现场赛E题 (并查集)

    题意:给出一棵树,找出一个点,求出所有点到这个点的权值和最大,权值为路径上所有边权的最小值. 用神奇的并查集,把路按照权值从大到小排序,然后用类似Kruskal的方法不断的加入边. 对于要加入的一条路 ...