Отладка C ++: MSVCP140D.dll либо не предназначен для работы в Windows - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь отладить программу на C ++, для которой я взял исходный код в Visual Studio 2017 Professional.Я могу построить приложение в конфигурации «Release x64», и оно прекрасно работает.

Даже когда я выполняю его в режиме Release , оно обращает внимание на точки останова.Но во время пошагового выполнения индикатор переходит в одну строку ветви if, хотя условие оценивается как false, а затем продолжает работать за ветвью, как и ожидалось (по иронии судьбы, строка, предполагаемая индикатором, будет выполнена, являетсяexit оператор, поэтому он определенно не выполнен).Я предполагаю, что некоторые авто-отступы приводили к тому, что символы отладки не синхронизировались с источником.Вот почему я хотел бы обновить символы или выполнить код в фактической конфигурации «Debug».

Однако, когда я переключаю стартовую конфигурацию на «Debug x64» и пытаюсь запустить проект, он даетОшибка «Bad Image»:

C: \ WINDOWS \ SYSTEM32 \ MSVCP140D.dll либо не предназначена для работы в Windows, либо содержит ошибку.Попробуйте установить программу еще раз, используя оригинальный установочный носитель, или обратитесь к системному администратору или поставщику программного обеспечения за поддержкой.Состояние ошибки 0xc000012f.

Из того, что я знаю, "MSVCP140D" означает версию DLL отладки Microsoft Visual C ++ v140.DLL не отсутствует, на самом деле у меня она находится в 6 местах на моей машине:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\debug_nonredist\x64\Microsoft.VC141.DebugCRT\msvcp140d.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\debug_nonredist\x86\Microsoft.VC141.DebugCRT\msvcp140d.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\onecore\debug_nonredist\x64\Microsoft.VC141.DebugCRT\msvcp140d.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\onecore\debug_nonredist\x86\Microsoft.VC141.DebugCRT\msvcp140d.dll
C:\Windows\System32\msvcp140d.dll
C:\Windows\SysWOW64\msvcp140d.dll

Рабочая нагрузка "Разработка на компьютере с C ++", как говорят, полностью установлена ​​VS Installer (которая заявляет о себена сегодняшний день версии 1.18.1100.314).Я обычно программирую на C #, поэтому я не знаком с тем, как взаимодействуют настройки проекта, и я заметил несколько вещей, но я не уверен, имеет ли какое-либо из них отношение к моей проблеме:

  1. Набор инструментов платформы - «Visual Studio 2017 ( v141 )».
  2. Единственный макрос, содержащий путь, который удаленно похож на один из 4 «перенаправленных» путей, упомянутых вышеявляется макросом $(DebugCppRuntimeFilesPath), который не является частью какой-либо записи в настройках «Каталоги VC ++».
  3. Этот макрос $(DebugCppRuntimeFilesPath) оценивается как «C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017»\ Professional \ VC \ Redist \ MSVC \ 14.16.270 23 \ debug_nonredist \ x64 ", когда DLL находится в" ... \ 14.16.270 12 \ ... ",Каталог "14.16.270 23 " не существует.

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

Обновление: Я также попытался загрузить установщик VS 2019 (версия 2.0.3297.403) и посмотреть, предлагает ли этолюбые обновления рабочих нагрузок VC ++, но, очевидно, это не так.

1 Ответ

1 голос
/ 15 мая 2019

Ханс Пассант предположил, что код ошибки означает, что файл dll в C:\Windows\System32\ поврежден.

Я проверил, что действительно dll в System32 (981 552 байта, без знака, только некоторые записи в свойствах файлавкладка сведений заполнена) отличается от той, что распространяется с VS (981 744 байта, подписано, полная информация на вкладке свойств файла).Поэтому я решил заменить текущий «msvcp140d.dll» в System32, переименовав его в «msvcp140d_orig.dll» и скопировав один из C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\debug_nonredist\x64\Microsoft.VC141.DebugCRT\ over.

Теперь отладка работает.

Я не уверен на 100%, что VS должен использовать этот файл , в отличие от того, который в первую очередь распространяется с рабочей нагрузкой, но, по крайней мере, моя проблема решена, и я могу отладить код.

...