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

如何调试_FORTIFY_SOURCE=2下的"*** buffer overflow detected ***"错误?

定位_FORTIFY_SOURCE=2触发的缓冲区溢出错误位置

以下是几种直接有效的定位方法:

1. 启用核心转储并分析

  • 先开启核心转储:在终端执行 ulimit -c unlimited,程序崩溃时会生成core文件
  • 用调试器加载核心文件:gdb ./program_name core
  • 在gdb中输入 bt(backtrace)命令,查看完整调用栈,直接定位触发溢出的代码行

2. 编译时保留调试符号

编译程序时添加-g参数保留调试信息,示例命令:

gcc -g -D_FORTIFY_SOURCE=2 your_code.c -o program_name

崩溃后直接用gdb启动程序:gdb ./program_name,输入run让程序运行,崩溃时gdb会自动停在出错位置,再用bt查看调用栈即可。

3. 捕获程序错误输出细节

_FORTIFY_SOURCE=2触发的溢出检测通常会在标准错误输出中打印更多细节(如调用的函数、内存地址),可将错误输出重定向到文件查看:

./program_name 2> error.log

打开error.log查看详细报错,结合调试符号能快速缩小定位范围。

4. 借助地址 sanitizer 精准检测

编译时添加-fsanitize=address参数,ASAN会更精准地定位溢出位置,还能显示溢出的具体字节数:

gcc -g -D_FORTIFY_SOURCE=2 -fsanitize=address your_code.c -o program_name

运行程序后,ASAN会直接在终端输出出错代码行、调用栈,甚至指明被越界访问的缓冲区。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:10:58