Как отлаживать проблемы с загрузкой статических зависимостей?

Как отладить сценарий, в котором приложение Visual C++ 2010 SP1 не может полностью загрузить свои зависимости и преждевременно завершает работу, не отображая свой пользовательский интерфейс?

Меня интересуют хорошие руководства по Fusion Logs, обходчику зависимостей и удаленному отладчику, если вы считаете, что они актуальны. Это то, что можно легко проверить с помощью WinDbg? А как насчет Process Explorer?

Можно ли запустить процесс на удаленной машине с подключенным удаленным отладчиком?

Можно ли проверить, установлена ​​ли правильная среда выполнения Visual C++ 2010 SP1?

Одно ограничение: приложение отлично работает на компьютере разработчика с установленной Visual Studio. Проблема может наблюдаться только на чистой целевой машине. Это означает, что проблема может исчезнуть после установки цепочки инструментов.


person GregC    schedule 27.04.2011    source источник
comment
stackoverflow.com/questions/255669/   -  person GregC    schedule 27.04.2011
comment
msdn.microsoft.com/en-us/library/2ys11ead.aspx   -  person GregC    schedule 27.04.2011


Ответы (3)


Можно ли запустить процесс на удаленной машине с подключенным удаленным отладчиком?

Что вы можете. Например, в Visual Studio 2008 щелкните проект правой кнопкой мыши -> Свойства -> Свойства конфигурации -> Отладка, выберите «Удаленный отладчик Windows» в раскрывающемся списке «Отладчик для запуска». Затем введите полный путь к вашему EXE-файлу на удаленном компьютере и соответствующие аргументы, если они есть.

Прежде чем сделать это, вам нужно сначала запустить монитор удаленной отладки на удаленной машине. Скопируйте \Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x86 (или другую платформу) на удаленный компьютер и запустите msvsmon.exe.

Как правило, если ваше приложение завершает работу из-за отсутствия какой-либо статической зависимости, вы можете использовать обходчик зависимостей, чтобы проверить, какая из них отсутствует.

person Eric Z    schedule 27.04.2011

Я всегда проверяю проблему зависимости от dll с помощью DependencyWalker, а затем использую Редактор глобальных флагов gFlags.exe, на вкладке "Файл изображения" , настройте свою программу и установите флажок "Показать снимки загрузчика".

Когда ваши программы запускаются, WinDbg.exe должен выводить множество сообщений о загрузке DLL, из них с помощью dependencyWalker вместе с вашим исходным кодом (если вы используете LoadLibrary) вы сможете узнать, где что-то идет не так.

person Peter    schedule 28.04.2011
comment
Еще одно голосование за «Показать снимки загрузчика». Вы узнаете больше, чем когда-либо хотели узнать о разрешении загрузки DLL. SxsTrace также покажет сведения о параллельной загрузке DLL без отладчика и быстро выявит, отсутствуют ли среды выполнения C. - person Gary Kratkin; 07.05.2011
comment
Ссылка на Dependency Walker, вероятно, должна сопровождаться большим предупреждающим знаком, что он больше не надежен. Он не обновлялся годами и в значительной степени отображает вводящую в заблуждение информацию для любой версии Windows 7 и выше. - person IInspectable; 28.06.2017
comment
Теперь есть современная альтернатива: github.com/lucasg/Dependencies. - person CherryDT; 21.04.2020

Посмотрите, может ли переключатель /VERBOSE помочь вам узнать, какую зависимость компоновщик пытается загрузить и запустить, когда вы создаете и начинаете отладку кода.

Если вы используете ключ /VERBOSE, то в основном компоновщик будет записывать сообщения в окно вывода о загружаемых библиотеках, которые также доступны в журнале сборки, так что вы можете просмотреть его для справки. Таким образом, если при загрузке конкретной зависимости возникает ошибка МОЖЕТ БЫТЬ, это может вам помочь.

Я пробовал /VERBOSE, когда у меня были ошибки ссылок, и я знал, какая зависимость вызвала проблему в моем коде.

См. http://msdn.microsoft.com/en-us/library/wdsk6as6(v=vs.80).aspx, чтобы проверить, может ли это вам помочь.

person aeon    schedule 27.04.2011