2016-06-02 2 views
-1

Я пытаюсь отладить сложную проблему, но я обнаружил, что мой режим выпуска получает файлы PDB, но не мой режим Debug. Мне нужны PDB в режиме отладки, natch.PDB-файл, созданный в Release, но не в режиме отладки в VS 2013 Неуправляемый C++/CLI

Что происходит?

Вот в режиме выпуска опции компилятора:

/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 

А вот Debug опции режим компилятора:

/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" 

И опции Debug Linker :

/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 
+0

Я предполагаю, что в конечном каталоге вывода отсутствует 'MyProjectName.pdb', а не' vc120.pdb' в промежуточном каталоге. 'MyProjectName.pdb' генерируется компоновщиком, а не компилятором. –

+0

Примечание: вы компилируете Unicode в Debug, но MBCS в Release. Вы используете предварительно скомпилированные заголовки в Release, но не в Debug. Вероятно, вы должны сделать это. –

+0

Благодаря @DavidYaw, я пробовал ваши предложения. Это не сработало, но это определенно стоило того. – empty

ответ

1

Варианты компоновщика релизов включают в себя /DEBUG, а опции компоновщика Debug - нет.


сторона отмечает

Там несколько вещей, различных между Debug и Release варианты, как правило, не отличаются. Это может быть хорошо, или, может быть, вы сделали изменение в одном и забыли сделать это в другом. В любом случае, они, вероятно, не связаны с проблемой, с которой вы сталкиваетесь.

  • Вы компилируете Unicode в Debug, но MBCS в Release.
  • Вы используете предварительно скомпилированные заголовки в Release, но не в Debug.
  • Вы указываете /SUBSYSTEM:WINDOWS в выпуске, но ничего не найдено в Debug. (Значение по умолчанию основано на том, какой основной метод вы заявляете.)
+0

Argggh! Благодаря! Добавление переключателя/DEBUG в Debug все еще не включило компиляцию PDB. Я также изменил набор символов, подсистему Windows и PCH, чтобы быть тем же, но проблема все еще существует. Я добавил пересмотренные варианты вопроса выше, минус посторонний * .lib Сумасшедшая вещь заключается в том, что она должна быть всего лишь одним переключателем, но какой именно переключатель ... – empty

+0

НАЙДЕНО! Последней проблемой был отсутствующий флаг Gm- «NO minimum rebuild» в компиляции Debug. По-видимому, минимальные перестройки препятствуют созданию PDB. Спасибо, что присоединились ко мне! Добавьте параметр Gm- в свой ответ, и я пометю его как ответ. – empty

+0

Еще одна вещь, которая может помешать генерации PDB-файлов в модульных тестах, - это то, что Target по какой-то причине не задается. См. Http://stackoverflow.com/questions/18946087/cannot-open-defaulttest-dll-for-unit-test – empty