当前位置:   article > 正文

一文看懂gdb简单调试_gdb -p

gdb -p

https://blog.csdn.net/unix21/article/details/9991925

gdb可视化调试:gdb -tui -q 可执行文件的名字


1.gdb编译/启动/退出/传参/查看源代码

  1. gdb编译程序
    使用gcc编译程序生成可执行文件的命令中,加上-g参数

  2. 启动gdb调试程序
    gdb 可执行程序

  3. 退出gdb调试
    在gdb中输入quit(q)

  4. 命令行传参
    set args ___ ___ ___

  5. gdb查看源代码:list(l)
    [1] listsize显示设置
            默认情况下,显示list的上下各10行
            list showsize #执行l命令,默认显示几行
            set listsize 20 #设置显示的行数为20
    [2] list(l)的使用
            list 文件名:行号
            list 文件名:函数名

2.断点相关命令

  1. 设置断点:break(b)
    b 文件名:行号
    b 文件名:函数名

  2. 条件断点
    b 行号 if 变量==var
    例:b 17 if i==10 表示:在第17行打断点,当i==10条件成立时,程序停在断点处

  3. 查看设置过的断点info(i) b

  4. 删除断点:del(d) 断点编号Num
    del num1 num2 … numN
    del numK1-numK2

  5. 将断点设为[无效]:disable(dis) 断点编号Num

  6. 将断点设为[有效]:enable(ena) 断点编号Num

3.代码调试相关命令

  1. 启动并执行程序,停在程序的第一行:start

  2. 启动并执行程序,停在断点break处:run®

  3. 查看变量的值:print§ 变量

  4. 查看变量的类型:ptype 变量

  5. 在程序执行的过程中,实时自动地显示变量的值:dispaly i
    取消实时自动地显示变量的值:
    info(i) display
    undisplay 编号Num

4. 常用调试

  1. gdb -p {进程号}
    ① 根据进程名,获取进程号码:pidof {进程名} --> 进程号
    ② 开启gdb调试:gdb {进程号}
    说明:gdb {进程号},会先杀死该进程,然后重启进程&进入gdb调试环境。

  2. 打断点技巧
    (1) b {代码文件}:函数名,例: b test.c:main
    (2) b {代码文件}:行号,例:b test.c 12

  3. 查看断点信息:info b

  4. commands:命令列表 (依赖于断点)
        每次断点发生时候,想要查看的变量很多时,如果每个变量都手动print则需要浪费很多时间。断点命令可以在断点发生时批量执行gdb命令。
        commands的设置步骤
    ① 打断点
    ② commands(开启commands)
    ③ > 命令1
    ④ > 命令2
    ⑤ > end (结束commands)

(gdb) l
1       #include <stdio.h>
2
3       int main()
4       {
5               int i;
6               for(i=0;i<100;i++)
7                       ;
8
9       }
10
(gdb) b 7    # 打断点
Breakpoint 1 at 0x4004c3: file main.c, line 7.
(gdb) i b    # 查看断点信息
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000004004c3 in main at main.c:7
(gdb) commands 1   # 开启commands
Type commands for breakpoint(s) 1, one per line.
End with a line saying just "end".
>p i    # commands中的命令行
>end    # 结束commands
(gdb) i b  # 查看断点详情,多了个p i
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000004004c3 in main at main.c:7
        p i
(gdb)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  1. 监视器(某个变量发生变化时,将自动打印,不依赖于断点
        可以监视某个变量,在变量被访问或者被修改时程序会在当前点进入断点。
    ① start 先启动
    ② watch {要监视的变量}

向下走,程序停在下一个断点:continue©

向下走一步,不会进入函数体:next(n)
向下走一步,会进入函数体:step(s)
跳出函数体:finish

从循环体直接跳出:until

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/288051
推荐阅读
相关标签
  

闽ICP备14008679号