Code::Blocks调试String代码触发Segmentation Error问题求助
解决Code::Blocks 16.01调试C++ string构造时的段错误问题
嘿,这个问题我之前在老版本Code::Blocks上踩过坑!先看一下你贴的代码,本身是完全没问题的:
#include <iostream> #include <string> using namespace std; int main (){ string hi("Hi how are you"); for(int i = 0;i<4;i++) cout<<hi<<endl; return 0; }
程序能正常编译运行就说明逻辑和内存操作都没毛病,调试时触发的Segmentation Error纯粹是Code::Blocks 16.01自带的GDB调试器版本太旧,和C++标准库的std::string实现存在兼容性bug。
老版本GDB在解析libstdc++里string的构造函数调试信息时,会出现错误的内存访问判断,导致单步进出这个语句时误报段错误,实际程序根本没访问非法内存。
给你几个可行的解决办法:
- 升级Code::Blocks到新版本:比如直接装20.03或更高版本,新版本配套的GDB调试器已经修复了这类兼容性问题,调试体验会顺畅很多。
- 单独更新GDB:如果不想换IDE,可以自己下载安装8.0以上版本的GDB,然后打开Code::Blocks的设置:
Settings -> Debugger -> GDB/CDB Debugger -> Default,把Executable path改成你新安装的GDB的路径,保存后重启IDE再调试就好了。 - 临时绕过:如果只是临时调试,直接在
for循环的第一行打个断点,调试时跳过string hi("Hi how are you")的单步操作,直接跳到断点处,就能避开这个错误触发点。
内容的提问来源于stack exchange,提问作者Embedded_Dude
相关产品推荐
相关产品推荐

