Лучшие инструменты для анализа условий загрузки DLL в Visual Studio для C ++ - PullRequest
2 голосов
/ 26 февраля 2010

Я использую Visual Studio 2008 для запуска приложения, которое загружает несколько библиотек DLL при запуске, и немедленно завершает работу с программой «[3668] cb_tcl.exe: Native» завершена с кодом -1072365566 (0xc0150002)."К сожалению, я не получаю никаких других подсказок об источнике проблемы, и выход происходит до запуска программы, но я подозреваю, что какая-то проблема с одной из DLL.Кто-нибудь может порекомендовать несколько хороших инструментов, которые помогут изолировать причину проблемы при запуске?

Ответы [ 4 ]

5 голосов
/ 26 февраля 2010

Я не уверен, что это то, что вы ищете, но Dependency Walker очень помогает мне в таких ситуациях.

1 голос
/ 26 февраля 2010

Вы не получаете никакого вывода в окне отладки Visual Studio? Например, когда я запускаю отладочную сборку, я получаю список библиотек DLL, которые она загружает следующим образом:

'Blah.exe': Loaded 'C:\StarTeam\Blah\Development\Blah\CODE\Debug\Blah.exe', Symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', No symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', No symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\ws2_32.dll', No symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll', No symbols loaded.
'Blah.exe': Loaded 'C:\WINDOWS\system32\ws2help.dll', No symbols loaded.

Ярлык для включения / отображения окна - Alt + 2 в VS2005. Я предполагаю, что то же самое в VS2008. Убедитесь, что в верхней части окна отображаются выходные сообщения «Отладка». И щелкните правой кнопкой мыши, чтобы убедиться, что выбран весь вывод, чтобы вы ничего не пропустили.

0 голосов
/ 26 февраля 2010

В окне вывода в Visual Studio 2005 будет отображаться загрузка dll при запуске в отладчике. Я уверен, что VS 2008 будет делать то же самое. Если он не показывает загрузку DLL, щелкните правой кнопкой мыши в окне вывода, вы должны увидеть меню, которое позволяет вам включить «Сообщения о загрузке модуля».

последнее сообщение о загрузке DLL должно быть вашим виновником. Затем вы можете установить точку останова в его DllMain и попытаться выяснить, почему она не работает.

0 голосов
/ 26 февраля 2010

Вы можете попробовать включить исключения по прерываниям в Debug-> Exceptions. Это может вызывать перехватываемое исключение, и если это так, если вы установите все флажки в окне «Отладка-> Исключения», отладчик прервет исключение, а не позволит программе так умереть.

Я сомневаюсь, что Dependency Walker поможет, он скажет вам, какие DLL вы загружаете, но так же как и окно вывода Visual Studio, и какой бы DLL ни был напечатан последним, это единственный вопрос, который стоит рассмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...