c++ 中有没有办法不为项目的特定部分生成调试信息?
is there a way in c++ not to generate debug information for a specific portion of a project?
我最近正在使用带有 Visual C++ 的 Eigen 库来求解一个非常大的稀疏线性系统。程序在 Release 模式下运行得非常快,但在 Debug 模式下需要数小时才能解决。我跟踪了时间,程序在 Eigen 的 "solve" 函数中花费了很长时间。我想在调试模式下构建项目,因为我需要进行大量调试。现在有没有办法不为 Eigen 部分生成调试信息?或者是否有任何其他解决此问题的方法?
您可以禁用调试信息并启用每个文件的代码优化。
在解决方案资源管理器中,右键单击包含 Eigen
函数的文件,然后选择属性。
在出现的对话框中,选择 C/C++->Optimisation 并选择与 Release 模式相同的选项。
然后选择 C/C++->常规,然后在 "Debug Information Format" 下选择 "None"。但是调试信息的存在可能对执行速度没有影响。
@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
。就我个人而言,我有过这样很好的经历;恕我直言,只有在极少数情况下,您才真正需要完全禁用优化。
我最近正在使用带有 Visual C++ 的 Eigen 库来求解一个非常大的稀疏线性系统。程序在 Release 模式下运行得非常快,但在 Debug 模式下需要数小时才能解决。我跟踪了时间,程序在 Eigen 的 "solve" 函数中花费了很长时间。我想在调试模式下构建项目,因为我需要进行大量调试。现在有没有办法不为 Eigen 部分生成调试信息?或者是否有任何其他解决此问题的方法?
您可以禁用调试信息并启用每个文件的代码优化。
在解决方案资源管理器中,右键单击包含 Eigen
函数的文件,然后选择属性。
在出现的对话框中,选择 C/C++->Optimisation 并选择与 Release 模式相同的选项。
然后选择 C/C++->常规,然后在 "Debug Information Format" 下选择 "None"。但是调试信息的存在可能对执行速度没有影响。
@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
。就我个人而言,我有过这样很好的经历;恕我直言,只有在极少数情况下,您才真正需要完全禁用优化。