在 VS 2013 Unmanaged C++/CLI 中以 Release 而非 Debug 模式生成的 PDB 文件
PDB file generated in Release but not Debug mode in VS 2013 Unmanaged C++/CLI
我正在尝试调试一个棘手的问题,但我发现我的发布模式正在获取 PDB 文件,但不是我的调试模式。我需要处于调试模式的 PDB,natch。
怎么回事?
这是发布模式编译器选项:
/GS /GL /W3 /Gy /Zc:wchar_t /I".." /I"C:\Users\Kevin\dev\IPCommon\Cpp" /Zi /Gm- /O2 /sdl /Fd"x64\Release\vc120.pdb" /fp:precise /D "LINKMETHODS_EXPORTS" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oi /MD /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Fp"x64\Release\LinkMethods.pch"
这是发布链接器选项:
/OUT:"C:\Users\Kevin\dev\EXO\x64\Release\LinkMethods.dll" /MANIFEST /LTCG /NXCOMPAT /PDB:"C:\Users\Kevin\dev\EXO\x64\Release\LinkMethods.pdb" /DYNAMICBASE "LinkData.lib" /IMPLIB:"C:\Users\Kevin\dev\EXO\x64\Release\LinkMethods.lib" /DEBUG /DLL /MACHINE:X64 /OPT:REF /INCREMENTAL:NO /PGD:"C:\Users\Kevin\dev\EXO\x64\Release\LinkMethods.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Release\LinkMethods.dll.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /VERBOSE /LIBPATH:"C:\Users\Kevin\dev\EXO\x64\Release\" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\UnitTest\lib" /LIBPATH:"C:\Users\Kevin\dev\EXO\Dependencies\opencv249\bin" /TLBID:1
下面是调试模式编译器选项:
/GS /W3 /Zc:wchar_t /I".." /I"C:\Users\Kevin\dev\IPCommon\Cpp" /Zi /Gm /Od /Fd"x64\Debug\vc120.pdb" /fp:precise /D "LINKMETHODS_EXPORTS" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /Fa"x64\Debug\" /EHsc /nologo /Fo"x64\Debug\" /Fp"x64\Debug\LinkMethods.pch"
和调试链接器选项:
/OUT:"C:\Users\Kevin\dev\EXO\x64\Debug\LinkMethods.dll" /MANIFEST /LTCG /NXCOMPAT /PDB:"C:\Users\Kevin\dev\EXO\x64\Debug\LinkMethods.pdb" /DYNAMICBASE "LinkData.lib" /IMPLIB:"C:\Users\Kevin\dev\EXO\x64\Debug\LinkMethods.lib" /DEBUG /DLL /MACHINE:X64 /INCREMENTAL /PGD:"C:\Users\Kevin\dev\EXO\x64\Debug\LinkMethods.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Debug\LinkMethods.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /VERBOSE /LIBPATH:"C:\Users\Kevin\dev\EXO\x64\Debug\" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\UnitTest\lib" /LIBPATH:"C:\Users\Kevin\dev\EXO\Dependencies\opencv249\bin" /TLBID:1
您的 Release 链接器选项包括 /DEBUG
,而 Debug 链接器选项不包括。
旁注
您的“调试”和“发布”选项之间有一些不同,但通常没有什么不同。这可能没问题,也可能是您在一个中进行了更改而忘记在另一个中进行更改。无论哪种方式,它们可能与您遇到的问题无关。
- 您在 Debug 中使用 Unicode 进行编译,而在 Release 中使用 MBCS 进行编译。
- 您在 Release 中使用预编译 headers,但在 Debug 中没有。
- 您在 Release 中指定了
/SUBSYSTEM:WINDOWS
,但在 Debug 中没有指定。 (默认值取决于您声明的主要方法。)
我正在尝试调试一个棘手的问题,但我发现我的发布模式正在获取 PDB 文件,但不是我的调试模式。我需要处于调试模式的 PDB,natch。
怎么回事?
这是发布模式编译器选项:
/GS /GL /W3 /Gy /Zc:wchar_t /I".." /I"C:\Users\Kevin\dev\IPCommon\Cpp" /Zi /Gm- /O2 /sdl /Fd"x64\Release\vc120.pdb" /fp:precise /D "LINKMETHODS_EXPORTS" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oi /MD /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /Fp"x64\Release\LinkMethods.pch"
这是发布链接器选项:
/OUT:"C:\Users\Kevin\dev\EXO\x64\Release\LinkMethods.dll" /MANIFEST /LTCG /NXCOMPAT /PDB:"C:\Users\Kevin\dev\EXO\x64\Release\LinkMethods.pdb" /DYNAMICBASE "LinkData.lib" /IMPLIB:"C:\Users\Kevin\dev\EXO\x64\Release\LinkMethods.lib" /DEBUG /DLL /MACHINE:X64 /OPT:REF /INCREMENTAL:NO /PGD:"C:\Users\Kevin\dev\EXO\x64\Release\LinkMethods.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Release\LinkMethods.dll.intermediate.manifest" /OPT:ICF /ERRORREPORT:PROMPT /NOLOGO /VERBOSE /LIBPATH:"C:\Users\Kevin\dev\EXO\x64\Release\" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\UnitTest\lib" /LIBPATH:"C:\Users\Kevin\dev\EXO\Dependencies\opencv249\bin" /TLBID:1
下面是调试模式编译器选项:
/GS /W3 /Zc:wchar_t /I".." /I"C:\Users\Kevin\dev\IPCommon\Cpp" /Zi /Gm /Od /Fd"x64\Debug\vc120.pdb" /fp:precise /D "LINKMETHODS_EXPORTS" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /MDd /Fa"x64\Debug\" /EHsc /nologo /Fo"x64\Debug\" /Fp"x64\Debug\LinkMethods.pch"
和调试链接器选项:
/OUT:"C:\Users\Kevin\dev\EXO\x64\Debug\LinkMethods.dll" /MANIFEST /LTCG /NXCOMPAT /PDB:"C:\Users\Kevin\dev\EXO\x64\Debug\LinkMethods.pdb" /DYNAMICBASE "LinkData.lib" /IMPLIB:"C:\Users\Kevin\dev\EXO\x64\Debug\LinkMethods.lib" /DEBUG /DLL /MACHINE:X64 /INCREMENTAL /PGD:"C:\Users\Kevin\dev\EXO\x64\Debug\LinkMethods.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"x64\Debug\LinkMethods.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /VERBOSE /LIBPATH:"C:\Users\Kevin\dev\EXO\x64\Debug\" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\UnitTest\lib" /LIBPATH:"C:\Users\Kevin\dev\EXO\Dependencies\opencv249\bin" /TLBID:1
您的 Release 链接器选项包括 /DEBUG
,而 Debug 链接器选项不包括。
旁注
您的“调试”和“发布”选项之间有一些不同,但通常没有什么不同。这可能没问题,也可能是您在一个中进行了更改而忘记在另一个中进行更改。无论哪种方式,它们可能与您遇到的问题无关。
- 您在 Debug 中使用 Unicode 进行编译,而在 Release 中使用 MBCS 进行编译。
- 您在 Release 中使用预编译 headers,但在 Debug 中没有。
- 您在 Release 中指定了
/SUBSYSTEM:WINDOWS
,但在 Debug 中没有指定。 (默认值取决于您声明的主要方法。)