使用gdb

本文介绍了如何使用GDB调试多线程和多进程的网络程序。讲解了GDB的基本用法,包括安装、编译带有调试信息的程序、设置断点、查看函数栈、跟踪进程和线程等。通过实例展示了在遇到错误时如何利用GDB定位问题,强调了GDB在调试中的高效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始

  • 近来在写网络服务器程序,涉及到了多线程,且由于网络的环境复杂的原因,常有未知情况发生,导致在程序中自行添加调试语句显得有些吃力
  • gdb 请出山来是一个最为正确的选择

使用

  • gdb看起来是全命令行的东西,而且一启动就是一大片英文,实在让没用过的望而却步,其实真正常用的就只有那几个功能。
  • 接下来我可能不会对这些命令进行明确的定义功能,因为有时候某些功能放在不同的地方意义就不同了,所以我只用最简单的语言来记录它们。

    1. 首先是安装,在(Debian)系的发行版 Linux 上,使用

      apt-get install gdb
      回车等一会就行,可能有的发行版已经装好了,但有的却没有。

    2. 首先不要打开这个gdb,因为这里面的东西的确看起来挺复杂的

    3. 我们要先有一个程序的源文件,假设是 C语言main.c
    4. 在里面写好正确的语句后,对它进行编译,链接,也就是调用 GCC,这里使用GCC的命令是

      gcc -o main -g main.c
      这个 -g 标志非常必要,意味着生成一些符号信息,用人话说就是 gdb 所需要的东西,没有这个东西是无法使用 gdb进行调试的。

    5. 紧接着,在当前目录下就有一个名为 main 的可执行文件,看好当前用户是否有权限执行它之后,使用如下命令开启调试旅程:

      gdb ./main
      紧接着,出现一大堆英文,不要慌,静静的等待它们装逼,最后会出现一个

      (gdb)
      光标在闪烁的时候,就证明 gdb 加载这个程序的符号信息完毕,你可以准备执行了

    6. 这时候,你只要输入一个字母 r, 就能让这个main程序执行起来

      (gdb) r

    7. 如果这个程序没有问题的话,几乎就和在外面正常运行时一样,gdb没有起到任何作用,但是一旦有任何问题的话,gdb就会暂停在那个出错的地方,而不是继续执行。
    8. 这里说的出错,不一定代表着就是程序出错或者崩溃退出,有可能是程序接收到了某个信号,信号在Linux中并不少见,这对于某些特殊用途的程序而言,看到接收到的信号十分重要,例如网络程序。

    9. 对于 r 这个命令除了这么孤零零的使用以外,还可以对它进行传递参数,例如你的main程序需要两个参数,你可以这样

      (gdb) r 192.168.141.149 8889
      这就和在外面使用:

      ./main 192.168.141.149 8889
      的效果一样

    10. 第二个命令自然是,最常用的设置断点,这也是十分简单, 命令就一个字母 b
    11. 最简单的用法就是直接接着一个数字,代表着要设置断点的地点(),例如

      (gdb) b 10
      

      表示在当前的执行文件中的第十行设置一个断点,设置完了会有成功信息:

      Breakpoint 1 at 0x400556: file main.c, line 10. 
      

      意思就是,设置了第一个断点,在内存位置0x400556地方,人类能懂得地方在 main.c 文件的第十行

    12. 另一种情况就是,当你的程序是多个文件编译而成的时候,你如果不指定文件名,那么默认就是在当前执行的这个地方所属的文件里设定

      (gdb) b main.c:10
      

      这就是完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值