首页 > 程序人生 > 手把手教你玩转GDB(三)——常用命令

手把手教你玩转GDB(三)——常用命令

本文是手把手教你玩转GDB的第三篇,主要内容是介绍一些在程序调试过程中最常用的GDB命令,废话不多话,开始今天的正题。
1.attach process-id/detach

  • (1)attach process-id: 在GDB状态下,开始调试一个正在运行的进程,其进程ID为process-id
  • (2)detach: 停止调试当前正在调试有进程,与attach配对试用
  • 2.kill

  • (1)基本功能:杀掉当前GDB正在调试的应用程序所对应的子进程
  • (2)如果想不退出GDB而对当前正在调试的应用程序重新编译、链接,可以在GDB中执行kill杀掉子进程,等编译、链接完后,再重新执行run,GDB便可加载新的可执行程序启动调试
  • 3.多线程程序调试相关:

  • (1)thread threadno:切换当前线程到由threadno指定的线程
  • (2)info threads:查看GDB当前调试的程序的各个线程的相关信息
  • (3)thread apply [threadno] [all] args:对指定(或所有)的线程执行由args指定的命令
  • 4.多进程程序调试相关(fork/vfork):

  • (1)缺省方式:fork/vfork之后,GDB仍然调试父进程,与子进程不相关
  • (2)set follow-fork-mode mode:设置GDB行为,modeparent时,与缺省情况一样;modechild时,fork/vfork之后,GDB进入子进程调试,与父进程不再相关
  • (3)show follow-fork-mode:查看当前GDB多进程跟踪模式的设置
  • 5.step & stepi

  • (1)step [count]: 如果没有指定count, 则继续执行程序,直到到达与当前源文件不同的源文件中时停止;如果指定了count, 则重复行上面的过程count
  • (2)stepi [count]: 如果没有指定count, 继续执行下一条机器指令,然后停止;如果指定了count,则重复上面的过程count
  • (3)step比较常见的应用场景:在函数func被调用的某行代码处设置断点,等程序在断点处停下来后,可以用step命令进入该函数的实现中,但前提是该函数编译的时候把调试信息也编译进去了,负责step会跳过该函数。
  • 6.next & nexti

  • (1)next [count]: 如果没有指定count, 单步执行下一行程序;如果指定了count,单步执行接下来的count行程序
  • (2)nexti [count]: 如果没有指定count, 单步执行下一条指令;如果指定了count, 音频执行接下来的count条执行
  • (3)stepinexti的区别:nexti在执行某机器指令时,如果该指令是函数调用,那么程序执行直到该函数调用结束时才停止。
  • 7.continue [ignore-count] 唤醒程序,继续运行,至到遇到下一个断点,或者程序结束。如果指定ignore-count,那么程序在接下来的运行中,忽略ignore-count次断点。
    8. finish & return

  • (1)finish: 继续执行程序,直到当前被调用的函数结束,如果该函数有返回值,把返回值也打印到控制台
  • (2)return [expression]: 中止当前函数的调用,如果指定了expression,把expresson值当做当前函数的返回值;如果没有,直接结束当前函数调用
  • 9.信号的处理

  • (1)info signals & info handle:打印所有的信号相关的信息,以及GDB缺省的处理方式:
  • (2)handle signal action: 设置GDB对具体某个信号的处理方式。signal可以为信号整数值,也可以为SIGSEGV这样的符号。action的取值有:
  • a. stopnostop: nostop表示当GDB收到指定的信号,不会应用停止程序的执行,只会打印出一条收到信号的消息,因此,nostop也暗含了下面的print; 而stop则表示,当GDB收到指定的信号,停止应用程序的执行。
    b. printnoprint: print表示如果收到指定的信号,打印出一条信息; noprintprint表示相反的意思
    c. passnopasspass表示如果收到指定的信号,把该信号通知给应用程序; nopass表示与pass相反的意思
    d. ignorenoignore: ignorenopass同义,同理,noignorepass同义

    1. 2010年8月30日22:59 | #1

      努力学习中,不知学不学得会

    2. 2010年8月30日23:28 | #2

      功夫不负有心人~@黄伟涛

    3. 2010年8月31日07:40 | #3

      看了你的博客能长很多见识,O(∩_∩)O

    4. 2010年8月31日17:14 | #4

      悲剧。我错了 。谢谢站长了。

    5. 2010年9月1日02:49 | #5

      很强大,支持下

    6. 2010年9月2日15:41 | #6

      GDB是什么啊?

    7. 2010年9月4日07:37 | #7

      博主果然有内涵。

    8. 2010年9月4日08:13 | #8

      仁者见仁智者见智,(~ o ~)

    9. 2010年9月10日12:56 | #9

      真的不亏是计算机高手我只懂皮毛

    1. 本文目前尚无任何 trackbacks 和 pingbacks.
    您必须在 登录 后才能发布评论.