百度
360搜索
搜狗搜索

linux下gdb怎么调试程序详细介绍

在 Linux 下使用 GDB 调试程序,需遵循以下核心步骤(附基础操作示例):

一、准备调试程序

1. 编译时保留调试信息
必须使用 -g 选项编译代码,否则 GDB 无法关联源码:
bash

gcc   demo demo.c  

g++ demo demo.cpp

2. 启动 GDB
bash

gdb ./demo  

gdb

二、基础调试命令(以 C 程序为例)

假设代码如下(保存为 demo.c):
c

 

a b a b

x y

sum x y

sum

1.
设置断点

  • 在指定行号打断点:
    (gdb) break demo.c:7 (在 main 函数第 7 行暂停)
  • 在函数名处打断点:
    (gdb) break main(gdb) b add
  • 条件断点(仅当 x>10 时触发):
    (gdb) break demo.c:7 if x>10

2.
运行程序

  • 开始运行(遇断点暂停):
    (gdb) run(gdb) r
    (可附加参数:r 10 20

3.
单步执行

  • 跳过函数(Step Over):
    (gdb) next(gdb) n (第 7 行的 add 会被当作一行执行)
  • 进入函数(Step Into):
    (gdb) step(gdb) s (会进入 add 函数内部)

4.
查看变量

  • 打印变量值:
    (gdb) print x(gdb) p sum
  • 持续监控变量(自动更新):
    (gdb) watch x

5.
查看调用栈

  • 查看当前栈帧:
    (gdb) backtrace(gdb) bt
  • 切换栈帧(如进入 add 后查看调用者):
    (gdb) frame 0 (0 为主函数栈帧,1 为 add 栈帧)

6.
继续执行

  • 继续运行到下一个断点:
    (gdb) continue(gdb) c
  • 运行到当前行的下一行(无需断点):
    (gdb) until(gdb) u (适合循环跳过)

三、常用进阶技巧

  1. 查看源码
    (gdb) list(gdb) l (默认显示当前断点附近代码)

  2. 修改变量值
    在调试暂停时修改变量:
    (gdb) set var x = 30 (将 x 改为 30,立即生效)

  3. 调试崩溃程序

    • 生成核心转储文件:
      先执行 ulimit -c unlimited,再运行程序使其崩溃,生成 core 文件。
    • 用 GDB 加载核心文件:
      gdb ./demo core,通过 bt 查看崩溃时的栈帧。

  4. 远程调试
    配合 gdbserver 调试远程服务器程序:
    bash

    gdbserver :1234 ./demo

    gdb ./demo

    gdb target remote 服务器IP:1234

四、示例完整流程

bash

gcc demo demo.c

gdb ./demo

gdb b main

gdb r

gdb n

gdb s

gdb p a

gdb c

gdb p

gdb q

常见问题

  • 无调试信息:报错 No symbol table loaded → 检查是否遗漏 -g 编译选项。
  • 断点无效:确保断点行号正确,或代码已编译到目标文件中。
  • 程序卡住:使用 Ctrl+C 暂停,查看当前栈帧(bt)分析阻塞原因。

通过以上命令,可覆盖 90% 的日常调试需求。GDB 还有更多高级功能(如宏调试、多线程调试),可根据具体场景进一步学习。

阅读更多 >>>  linux下面怎么dbg调试

网站数据信息

"linux下gdb怎么调试程序"浏览人数已经达到22次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:linux下gdb怎么调试程序的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!