为啥使用 gdb 启动 C++ 程序时出现分段错误?
Posted
技术标签:
【中文标题】为啥使用 gdb 启动 C++ 程序时出现分段错误?【英文标题】:Why do I have a segmentation fault when starting my C++ program with gdb?为什么使用 gdb 启动 C++ 程序时出现分段错误? 【发布时间】:2014-05-23 16:34:44 【问题描述】:我有一个 g++ 项目,想使用 gdb 对其进行调试。以程序作为参数打开 gdb 会产生以下输出:
Reading symbols from <my_app_name>...Segmentation fault (core dumped)
编译标志
-c -Wall -Werror -Wfatal-errors -Wpedantic -std=c++11 -g
链接标志
-lssl -lcrypto -pthread -luuid -rdynamic
我的可执行文件大小为 2,141,712,其中包含调试信息 “top 命令”显示 3,417,168 个可用内存。
$ g++ --version
g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
$ gdb --version
GNU gdb (Ubuntu 7.7-0ubuntu3.1) 7.7
我过去在gdb方面的经验有限,我打算在这个项目中使用gdb,不幸的是,由于我的可执行文件启动时gdb分段错误,调试体验会很困难。有人可以帮忙吗?
我也问过这个问题Ask Ubuntu,但我的问题在那里结束了,因为它更适合 Stack Overflow。
【问题讨论】:
【参考方案1】:乍一看:
您的编译标志似乎缺少前导破折号:
-c std=c++11 -g
应该是:(add leading dash in front of std=c++11
)
-c -std=c++11 -g
您的链接标志:
-lssl -lcrypto -pthread -luuid -std=c++11-rdynamic
应该是:(add space between -std=c++11 and -rdynamic
)
-lssl -lcrypto -pthread -luuid -std=c++11 -rdynamic
请注意,您不需要两次使用 -std=c++11
选项(配置和链接标志)。
使用更新的标志再试一次。
【讨论】:
抱歉@iomix,我在重新复制 CXXFLGS 时输入了一个错字。我已经用正确的标志编辑了原始问题。在 -std=c++11 之前,我确实有领先优势。我还从链接标志中删除了 -std=c++11,感谢您的提示。仅供参考,删除链接标志 -std=c++11 后,我仍然会收到从 gdb 加载项目的段错误。以上是关于为啥使用 gdb 启动 C++ 程序时出现分段错误?的主要内容,如果未能解决你的问题,请参考以下文章