gdb便利用法

1,不退出gdb,执行shell命令

(gdb) shell ls
a.out  foo  more.c  pipe1.c  test1.c  test.c
(gdb) shell gcc test.c -g

2,不退出gdb,执行make命令

(gdb) make

3,保存GDB 命令的输出到一个文件里

  • set logging on

    激活日志功能.

  • set logging off

    关闭日志功能.

  • set logging file file

    改变当前的logfile 名字. 默认的logfile 是‘gdb.txt’.

  • set logging overwrite [on|off]

    默认的,gdb 会以附加的方式保存日志。如果你想改为覆盖方式保存的话,可以设置为覆盖方式。

  • set logging redirect [on|off]

    默认的,gdb 输出会打印到终端和logfile。可以将终端重定向到logfile 里,如果你只要它输出到logfile 里。

  • show logging

    显示当前日志设置

4,path和环境变量

  • path directory
    在PATH 环境变量的前头加上diretory(可执行程序的搜索路径)。

  • show paths

    显示可执行程序的搜索路径列表(PATH 环境变量)。

  • show environment [varname]

    打印名为varname 的环境变量的值。如果你没提供varname,打印所有的环境变量的名
    称和值。你可以缩写environment 为env.

  • set environment varname [=value]

5,调试一个已经在运行的进程

(gdb) attach process-id

6,checkpoint功能

在某些操作系统(目前只在GNU/Linux 上),GDB 可以保存一个程序状态的快照,称为检查点,以后可以跳回。跳回到检查点会撤销所有在检查点之后的变化。这些变化包括内存,寄存器,甚至系统状态(有些限制)。这样可以有效的及时回到在检查点设置的状态。
因此,如果你单步调试到你认为你接近到快要发生错误的地方,你就可以保存一个检查点。接着,如果你不经意的走的太远错过了关键的状态,你可以回到检查点后再从那里开始,而不需要从头启动程序。
检查点对于需要很长时间或者单步调试里bug 发生地方很远的情况下很有帮助。

  • checkpoint

    保存被调试程序当前执行状态的快照。checkpoint 命令不需要参数,但每个检查点都分
    配一个小整数标识,如同breakpoint 标识一样。

  • info checkpoints

    列出在当前被调试会话的检查点。对于每个检查点,信息显示如下:
    Checkpoint ID
    Process ID
    Code Address
    Source line, or label

    (gdb) info checkpoints
      1 process 20516 at 0x4006e9, file test.c, line 30
    * 0 process 20512 (main process) at 0x4006e9, file test.c, line 30
    
  • restart checkpoint-id

    在检查点号的状态上重新启动。所有程序变量,寄存器,栈帧等等都恢复到检查点上保
    存的状态。本质上将,gdb 会把时钟回拨到检查点所记录的时间。

  • delete checkpoint checkpoint-id

    删除以前保存的检查点

c/c++ 学习互助QQ群:877684253 本人微信:xiaoshitou5854

posted @ 2020-04-02 18:31  小石王  阅读(...)  评论(...编辑  收藏