我最近使用Visual C ++处理Eigen库来解决一个非常大的稀疏线性系统。程序在发布模式下工作得非常快,但在调试模式下,需要数小时才能解决。我追踪了时间,程序需要很长时间才能解决问题。特征函数。我想在调试模式下构建项目,因为我需要调试很多。现在有没有办法不为特征部分生成调试信息?或者这个问题还有其他解决方法吗?
答案 0 :(得分:8)
@MichaelWalz的答案很棒,但我想补充(正如我在你的问题评论中所述)我强烈建议不要在调试模式下使用Eigen 。 / p>
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
。我个人经历过这样的非常好的经历;恕我直言,只有在非常罕见的情况下,你才真正需要完全禁用优化。
答案 1 :(得分:6)
您可以禁用调试信息并为每个文件启用代码优化。
在解决方案资源管理器中,右键单击包含Eigen
函数的文件,然后选择“属性”。
在出现的对话框中,选择C / C ++ - >优化,然后选择发布模式中的相同选项。
然后选择C / C ++ - > General和" Debug Information Format"选择"无"。但是调试信息的存在可能对执行速度没有影响。