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

C++扫雷原型出现Segmentation Fault,求助PuTTy/Emacs定位方法

解决PuTTY+Emacs环境下C++段错误定位问题

嘿,作为刚接触C++的新手碰到段错误确实头疼,尤其是在PuTTy和Emacs这种没有图形化IDE调试界面的环境里。别担心,这俩工具其实都有实用的段错误定位功能,我来给你一步步讲清楚:

一、用Emacs结合GDB定位错误

首先要确保你的代码是带调试信息编译的,编译时一定要加上-g参数,比如在终端里执行:

g++ -g 你的文件名.cpp -o 可执行文件名

这样生成的程序包含调试符号,才能精准定位到错误行。

在Emacs里的操作步骤:

  • 打开你的C++代码文件,按下M-x(也就是Alt+x组合键),然后输入gdb并回车。
  • 接着输入你的可执行文件路径(比如./mine),就能启动GDB调试器。
  • 在GDB提示符下输入run运行程序,当触发段错误时,GDB会直接告诉你错误发生在代码的哪一行,还能显示函数调用栈。
  • 如果你觉得纯终端调试不够直观,可以输入M-x gud-gdb,Emacs会自动分栏显示代码和调试信息,操作起来更友好,新手也能快速跟上。

二、PuTTy终端里直接用GDB排查

PuTTy本质是远程终端,直接用GDB就能搞定:

  1. 同样先执行带-g的编译命令,生成带调试信息的可执行文件。
  2. 在PuTTy终端输入gdb ./你的可执行文件名启动调试器。
  3. 输入run运行程序,等段错误触发后,输入backtrace(或者简写bt),就能看到完整的调用栈信息,里面会明确标出错误发生的代码行号和函数调用路径。
  4. 要是想查看错误行附近的代码,输入list 行号就能显示对应的代码内容,方便你排查问题。

额外小提示

你提到正在写扫雷程序,段错误常见原因比如:

  • 数组越界(比如你定义了ROWS=9和COLS=26,访问棋盘的时候是不是不小心超出了这个范围?)
  • 空指针解引用
  • 栈溢出

如果之后能把populate_board函数的完整代码贴出来,能更精准地帮你定位问题,但先试试上面的调试方法,应该能快速找到错误发生的具体位置。

我的代码片段如下:

#include <iostream> 
#include <ctime> 
#include <cstdlib> 
using namespace std; 
const int ROWS = 9; 
const int COLS = 26; 
void populate_board...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:41:55