c++ - 如何使用 scons 生成带有调试信息的 MSVC 解决方案?

标签 c++ debugging scons visual-studio-2010

我正在为旨在跨平台的 C++ 项目编写 scons 脚本。在 windows 中,脚本生成 msvc 解决方案。脚本片段如下:

ENV={'PATH':os.environ['PATH']}
if build_type=='Release':
    CCFLAGS=['/Ox','/EHsc','/DNDEBUG','/W3']
else:
    CCFLAGS=['/Zi','/EHsc','/W3']
ENV['TMP']=os.environ['TMP']
if os_architecture=='32bit':
    arc='x86'
else:
    arc='amd64'
env=Environment(CCFLAGS=CCFLAGS,CPPPATH=include_path,LIBPATH=lib_path,RPATH=lib_path,LIBS=libs,ENV=ENV,MSVS_ARCH=arc,TARGET_ARCH=arc)

在 Debug模式下,解决方案文件应该包含调试信息。但是,当我在 Debug模式下调试代码时,会收到“找不到调试信息或调试信息不​​匹配”的警告。不知道为什么。生成一个“.pdb”文件。

最佳答案

Zi 参数将告诉 VS 在编译阶段创建一个 pdb,但是,您仍然需要指定链接时 pdb 生成(是的,它非常多余,但可能有一些超精细的原因-粒度控制)。如果您看到的 PDB 名为 vc###.pdb(### 是您的 vc 编译器版本),那么这是您的 obj 文件的编译时 pdb,而不是您实际 dll 的可调试链接时 pdb .

任何人,我将以下行添加到 scons,现在我有一个可调试的正确 .pdb:

# Produce one .PDB file per .OBJ when compiling, then merge them when linking.
# Doing this enables parallel builds to work properly (the -j parameter).
# See: http://www.scons.org/doc/HTML/scons-man.html section CCPDBFLAGS
# 
env['CCPDBFLAGS'] = '/Zi /Fd${TARGET}.pdb'

我从以下非常有用的样本 SConscript 中得到的 http://www.scons.org/wiki/MsvcIncrementalLinking

关于c++ - 如何使用 scons 生成带有调试信息的 MSVC 解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23390936/

相关文章:

c++ - 初学c++如何返回一个数的位数?

django - 如何关闭 oTree 中的 Debug模式?

wcf - Visual Studio 2013 : Debug using IP Address instead of LocalHost

scons - 使用 SCons 编译 Godot

python - 使用 SCons 的 VariantDir 和 Repository 来构建使用自定义生成器

c++ - QTextDocument 中文本前的边框

c++ - 从 c 调用 swift

c++ - boost ptr_vector 迭代器

objective-c - XCode Debugger( Debug模式项目)在某一行没有断点停止,Profiler 在同一行崩溃

scons - 如何调试并行 scons 构建