2013-03-28 2 views
1

При запуске приложения я получаю диалоговое окно ниже. Я понимаю, это указывает на проблему загрузки библиотеки времени выполнения. Проблема в том, что я не вижу возможности получить более подробную информацию. Какая библиотека? Какова была конкретная проблема при загрузке? и т.д .. Средство просмотра системных событий не имеет записей для этого. Есть ли какие-либо трюки, чтобы выяснить, какую именно библиотеку она пыталась загрузить, когда она попала в ошибку и какова была конкретная проблема?Ошибка Visual Studio на Visual C++ при запуске - любые отладочные трюки?


Microsoft Visual C++ Runtime Library 

Runtime Error! 

Program: exe path 

R6034 
An application has made an attempt to load the C runtime library incorrectly. 
Please contact the application's support team for more information.* 

Мой текущий подход для решения во время выполнения Lib зависимостей для сканирования каталога установки, извлечения из встроенных манифестов для .dll и .exe файлов, а затем генерировать .config и .2.config файлы перенаправить на второстепенные версии среды выполнения, с которой я отправляю. Раньше это всегда получало работу. Не так в этом случае.

Это может быть несколько затруднено тем фактом, что вызывающий код является родным C++, но некоторые из DLL используют .NET. Я называю C++ API, но под капотом он заканчивает использование некоторых DLL, которые сами используют .NET.

ответ

3

Используйте SysInternals Process Monitor для мониторинга доступа к файловой системе. Отфильтруйте имя и действие процесса (CreateFile), чтобы узнать, какие DLL-файлы не могут найти.

+1

Именно это и помогло мне разобраться в проблеме. Оказывается, в каталоге установки была запущенная библиотека времени исполнения vc80 в дополнение к наличию подкаталогов для исполняемых библиотек (CRT, MFC, ...). Избавиться от этого исправлено. Это была неправильная попытка загрузить тот, который был в верхней директории, которая была неправильной версией. Я нашел это с помощью Process Monitor, увидев последнюю DLL, которую он пытался загрузить, до того, как появилось диалоговое окно. – Nerdtron

+0

Рад, что это сработало. Я использую этот инструмент почти ежедневно. –

1

Это может указывать на неверную версию msvcr * .dll.

Вы можете попробовать Dependency Walker (http://www.dependencywalker.com/), чтобы узнать, где он находится.

+0

Является ли этот инструмент манифестным? Я помню, как часто пользовался ходунгом зависимостей, но, похоже, он не знал о манифестной версии. Я посмотрю, хотя. – Nerdtron

+0

Похож на знакомого, которого я использовал в прошлом; Конечно, это говорит вам, от каких DLL что-то зависит, но в этом случае я думаю, что это, возможно, незначительный конфликт версий, который требует, чтобы информация о встроенных манифестах соглашалась. Я не думаю, что этот инструмент достаточно хорош, чтобы видеть информацию о зависимостях младшей версии, выраженную во встроенных файлах манифеста. Не говоря уже о том, что проблема здесь в том, что у меня много тонких DLL, я не знаю, какая из них вызывает проблему. Я хотел бы выяснить, где проблема на самом деле происходит. – Nerdtron

+0

Ну, ходячий ходячий не делал этого. Он сообщает только, какие DLL-файлы по имени файла находятся в списке импорта для модуля. Он не понимает более тонкую информацию о зависимостях во встроенных манифестах и, конечно же, не знает о библиотеках, загружаемых во время выполнения (без импорта).Поэтому, хотя это, вероятно, полезный инструмент для некоторых вещей, здесь это не помогает. – Nerdtron

1

Убедитесь, что у вас есть отладочная версия кода, к которому вы пытаетесь подключиться. В меню «Отладка» выберите «Присоединить к процессу». Использование ProcessId -

Также проверьте это - http://support.microsoft.com/kb/235434 Разрешение 1

Вы должны быть в состоянии присоединиться к процессу с помощью диспетчера задач: Включить только по времени отладки (JIT): В Visual C++, на в меню «Сервис» выберите «Параметры». На вкладке «Отладка» убедитесь, что выбрана «Отладка по времени». Запустите диспетчер задач и выберите процесс подключения. Щелкните правой кнопкой мыши и выберите «Отладка».

Разрешение 2

Run Task Manager и получить идентификатор процесса для процесса, который требуется для отладки. В командной строке введите следующее: msdev -p Это запустит Visual C++ и будет прикрепляться к указанному процессу.

+0

Исход из отладчика (VS2010) из источника в сборке отладки не обнаруживает проблемы. – Nerdtron

+0

Как Резолюция 1, так и Резолюция 2 и предоставленная вами ссылка просто объясняют, как подключиться к процессу для отладки. Не знаю, как это применимо здесь. Моя проблема заключается не в том, как подключиться к отладчику, я могу запустить его из отладчика. Проблема не возникает в отладке btw. Я пытаюсь получить информацию о том, в какой библиотеке возникла проблема. – Nerdtron