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

VSCode使用code-runner运行C++时如何查找错误所在行号?

VSCode Code Runner 运行C++段错误定位行号方法

你看到的/bin/sh: line 1: 87002 Segmentation fault: 11 "/my/path"是操作系统抛出的底层内存错误提示,Code Runner默认只是把终端原始输出透传出来,本身没有错误解析能力,按下面的方法配置就能直接定位到出错行:

方法1:编译时加AddressSanitizer(新手首选,零额外操作)

这是编译器内置的内存错误检测工具,编译时带上对应参数,运行时一旦触发段错误、数组越界、空指针访问、野指针这类问题,会直接打印出错行号、调用栈、错误类型,不用手动进调试器。

  • 打开VSCode设置,搜索Code Runner: Executor Map,点击「在settings.json中编辑」
  • 找到C++对应的执行命令,给编译参数加上-g -fsanitize=address,修改后参考如下:
"cpp": "cd $dir && g++ -g -fsanitize=address $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
  • 保存设置后重新运行程序,触发段错误时终端会直接输出明确的出错代码行、非法内存操作类型。
    注:MacOS自带的Clang编译器、Linux下GCC 4.8以上版本都原生支持该参数,不需要额外安装依赖

方法2:用系统自带调试器定位

如果不想每次编译带检测参数,可以用系统自带的调试工具抓取段错误位置:

  • 先按上面的步骤给编译命令加上-g参数,作用是生成带行号、函数名的调试符号,没有这个参数调试器没法把错误地址对应到具体代码行
  • 编译生成可执行文件后,在VSCode内置终端进入对应目录:
    • MacOS系统执行lldb ./你的可执行文件名进入调试器
    • Linux系统执行gdb ./你的可执行文件名进入调试器
  • 调试器内输入run启动程序,复现段错误后调试器会自动暂停,输入bt回车就能打印完整调用栈,栈信息里会明确标注每一层调用对应的代码行号,直接定位出错位置。

为什么Code Runner默认不显示错误行

Code Runner本质是快捷命令执行插件,默认的C++编译参数不带调试符号、没有挂载任何错误检测模块,操作系统返回的段错误信号本身只携带进程ID、错误类型,不关联具体代码行,所以透传出来的信息就只有你看到的那行系统提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:24:23