c ++中有没有办法不为项目的特定部分生成调试信息?

Muh*_*zib 3 c++ visual-c++ eigen visual-studio-2012

我最近使用Visual C++处理Eigen库来解决一个非常大的稀疏线性系统.程序在发布模式下工作得非常快,但在调试模式下,需要数小时才能解决.我追踪了时间,程序在Eigen的"求解"功能中需要很长时间.我想在调试模式下构建项目,因为我需要调试很多.现在有没有办法不为特征部分生成调试信息?或者这个问题还有其他解决方法吗?

min*_*iot 8

@MichaelWalz的答案很棒,但我想补充一下(正如我在你的问题评论中所述)我强烈建议不要在调试模式下使用Eigen.

Eigen是一个高效但非常有用的矩阵库.它通过大量的"模板魔术",使用多层抽象来实现其效率,并依赖于编译器的优化阶段来生成高效的代码.

调试模式通常意味着编译器创建调试符号,但也禁用优化.在GCC/clang中,它通常相当于-O0 -g; 我相信它对应的Visual Studio /O0 /DEBUG.

我建议使用"release-with-debug-info"模式构建所有使用Eigen的代码(CMake调用的代码CMAKE_BUILD_TYPE=RelWithDebInfo).这意味着您允许编译器进行优化,同时仍然生成调试符号.在GCC/clang中,这通常相当于-O2 -g; 我相信它对应的Visual Studio /O2 /DEBUG.我个人经历过这样的非常好的经历; 恕我直言,只有在非常罕见的情况下,你才真正需要完全禁用优化.


Jab*_*cky 6

您可以禁用调试信息并为每个文件启用代码优化.

在解决方案资源管理器中,右键单击包含该Eigen函数的文件,然后选择"属性".

在出现的对话框中,选择"C/C++" - >"优化",然后选择"发布"模式下的相同选项.

然后选择C/C++ - > General,在"Debug Information Format"下选择"None".但是调试信息的存在可能对执行速度没有影响.