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就能搞定:
- 同样先执行带
-g的编译命令,生成带调试信息的可执行文件。 - 在PuTTy终端输入
gdb ./你的可执行文件名启动调试器。 - 输入
run运行程序,等段错误触发后,输入backtrace(或者简写bt),就能看到完整的调用栈信息,里面会明确标出错误发生的代码行号和函数调用路径。 - 要是想查看错误行附近的代码,输入
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
相关产品推荐
相关产品推荐

