Ubuntu下Qt Creator调试Debug构建C++程序时PC跳变问题求助
解决Qt Creator中Debug构建调试时PC跳变的问题
我之前也碰到过一模一样的情况!明明已经开了Debug构建,断点能命中,但程序计数器却像在调试Release优化代码一样跳来跳去,甚至同一线程下也这样。下面是我亲测有效的排查和解决步骤:
确认CMake的Debug配置完全生效
别只看构建设置里加了-DCMAKE_BUILD_TYPE=Debug,要做双重验证:- 打开项目根目录下的
CMakeCache.txt,搜索CMAKE_BUILD_TYPE,确保值是Debug; - 检查
CMAKE_CXX_FLAGS_DEBUG的配置,必须是-g -O0(没有任何优化选项),如果里面混了-O1/-O2之类的,直接删掉; - 可以在代码里加一段测试代码,编译运行确认:
#ifdef NDEBUG std::cout << "Warning: Running in Release mode!" << std::endl; #else std::cout << "Running in Debug mode!" << std::endl; #endif
- 打开项目根目录下的
检查Qt Creator调试器配置
打开Tools -> Options -> Debugger -> GDB(如果用GDB调试),重点看这两个地方:- 确保没有勾选任何和“优化代码调试”相关的实验性选项;
- 检查GDB版本,老版本(比如9.x之前)对某些C++17/20特性的Debug信息支持不好,建议更新到最新稳定版。
排查项目局部编译选项
有些项目会给特定目标(比如某个子库、某个源文件)单独设置编译选项,哪怕全局是Debug,这些局部设置也可能强制开启优化。检查所有target_compile_options、set(CMAKE_CXX_FLAGS ...)的代码,确保没有局部添加-O开头的优化参数。清理并重新构建项目
有时候旧的Release构建产物会残留,导致Debug构建时混合了优化后的目标文件。直接点击Qt Creator里的Build -> Clean All,然后删除整个构建目录,再重新Build All,确保所有文件都是用Debug配置编译的。
我当时就是因为子模块的CMakeLists里偷偷加了-O1优化,去掉之后调试就完全正常了,PC再也不乱跳了!
内容的提问来源于stack exchange,提问作者martinako
相关产品推荐
相关产品推荐

