You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对GCC编译的C项目进行逐行崩溃调试以解决停止工作错误

用GDB调试你的C程序,轻松定位崩溃问题

当然可以用GDB!这正是解决这类运行时崩溃问题的最佳工具,比你手动加一堆printf高效太多了。下面一步步教你怎么用:

第一步:编译时加入调试信息

首先,你需要重新编译代码,加上-g参数——这个参数会让GCC生成包含调试符号的可执行文件,没有它GDB没法帮你定位到具体代码行。
编译命令示例:

gcc -g your_source_files.c -o test.exe

第二步:启动GDB并运行程序

打开终端,输入以下命令启动GDB并加载你的可执行文件:

gdb test.exe

进入GDB交互界面后,输入run(或者简写r)来运行程序:

(gdb) run

这时候程序会正常执行,直到崩溃的瞬间——GDB会立刻停下来,告诉你错误类型(比如常见的Segmentation fault段错误),并直接指出出错的代码行和函数。

第三步:定位崩溃原因

如果想知道崩溃时的函数调用路径(比如是哪个函数调用了出错的代码),输入backtrace(简写bt):

(gdb) bt

这个命令会打印出完整的调用栈,从当前崩溃的函数一直回溯到main函数,帮你快速锁定问题发生的上下文。

第四步:逐行调试(按需使用)

如果不想直接跑到崩溃点,想一步步排查代码,可以用这些命令:

  • start:从main函数的第一行开始执行,自动停在那里
  • next(简写n):执行下一行代码,但不会进入函数内部(适合快速跳过函数调用)
  • step(简写s):执行下一行代码,如果是函数调用,会进入函数内部逐行调试
  • break 行号/break 函数名:设置断点,比如break test.c:25会在test.c的第25行设置断点,break calculate会在calculate函数开头设置断点
  • continue(简写c):从当前断点继续运行,直到下一个断点或崩溃

额外实用技巧

  • print 变量名:查看某个变量的当前值,比如print user_input,帮你判断变量是否符合预期
  • info locals:一次性查看当前函数的所有局部变量值
  • list(简写l):显示当前代码附近的几行,方便你对照调试

用GDB的好处是不用反复修改代码加printf,也不用重新编译,直接在可执行文件上就能精准调试。大部分运行时崩溃(比如空指针访问、数组越界、栈溢出)都能通过GDB快速定位到具体代码行。

内容的提问来源于stack exchange,提问作者3code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:32:25