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

时间:2014-04-30 14:32:40

标签: 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)

在调试模式下,解决方案文件应包含调试信息。但是当我在调试模式下调试代码时,我得到“无法找到调试信息或调试信息不​​匹配”的警告。无法弄清楚为什么。生成了一个“.pdb”文件。

1 个答案:

答案 0 :(得分:0)

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

Anywho,我在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