Visual Studio 2012 Express, отладка explorer.exe - нет попадания в точку останова
У меня проблема с отладкой надстройки SolidWorks Enterprise PDM. Я не знаю, как надстройки обрабатываются в EPDM, но проблема, похоже, связана с Visual Studio - возможно, у кого-то еще есть аналогичная проблема с надстройками других платформ.
Добавление надстройки отладки (чтобы использовался последний источник):
В Visual Studio 2010 Express нет проблем - убить проводник, запустить его, присоединить к нему и:
Я не мог добиться того же с Visual Studio 2012 Express. Хотя кажется, что это проводник отладки (файлы доступны только для чтения, отображается кнопка остановки отладки), он не достигает точек останова:
Я работаю на Windows 7 Professional x64. Надстройки создаются с помощью.NET 3.5. Я использовал решения VS2010 и VS2012 с одной и той же проблемой.
Я перезапускаю explorer.exe, поэтому загружается последняя версия надстройки. Проект использует стартовое действие "explorer.exe":
<StartAction>Program</StartAction>
<StartProgram>$(windir)\explorer.exe</StartProgram>
<StartArguments></StartArguments>
Я не знаю, почему не сломаны точки останова, любая помощь очень ценится.
Спасибо!
ОБНОВЛЕНИЕ 1
Я проверил, что предложил Ганс - запускаются два других процесса, но присоединение к ним ни к чему не привело.
Это указало на еще одну вещь - когда я прикреплял к этим процессам, в VisualStudio была информация о том, что точки останова не будут достигнуты, поскольку не было загружено ни одного отладочного символа - обратите внимание, что в третьем прикрепленном изображении загружаются отладочные символы красный кружок заполнен и без восклицательного знака).
ОБНОВЛЕНИЕ 2
Когда я подключил VisualStudio к управляемому explorer.exe - точки останова были сбиты!
Кажется, что explorer.exe работает в управляемом режиме только иногда:
Он даже может работать в обоих режимах бок о бок:
Итак, вопрос в том, как заставить VisualStudio запустить explorer.exe в управляемом режиме?
ОБНОВЛЕНИЕ 3
Возможно ли это ошибка VisualStudio 2012?
При отладке с VS2010 проводник запускается в обычном режиме, но как только надстройка загружается, он переключается в управляемый режим, и VS2010 останавливается в точках останова.
В VS2012 все по-другому - при загрузке надстройки explorer.exe не переключается в управляемый режим и (следовательно, он подключен?) Не останавливается.
Но когда VS2012 подключен к explorer.exe, который уже находится в управляемом режиме, он останавливается на точках останова.
ОБНОВЛЕНИЕ 4
Мне удалось решить суть проблемы - при подключении VS2012 к другому процессу (например, explorer.exe) с помощью "Автоматически определять тип кода для отладки" выбран ", и процесс запускается в основном режиме и через некоторое время загружается управляемый код - отладчик не останавливается на точках останова. Когда процесс уже находится в управляемом режиме при подключении или при подключении с явно выбранными типами кода ("Managed (v3.5, v3.0, v2.0)") - отладчик останавливается на точках останова.
Уже размещено на сайте Connect - в ожидании решения. Пожалуйста, проголосуйте, если у вас возникли проблемы, описанные в этом обновлении.
ОБНОВЛЕНИЕ 5
Я только что проверил его на простом управляемом расширении оболочки, поэтому оно не связано с SolidWorks Enterprise PDM.
Я также опубликовал более точную ошибку при подключении.
ОБНОВЛЕНИЕ 6
На начало 2013 года Microsoft заявляет, что это дизайнерское решение о том, что отладчик работает не так, как ожидалось. Больше подробностей в первом сообщении об ошибке подключения.
1 ответ
Когда вы строите .dll
(Я предполагаю, что таким образом он загружается в проводник) У точек останова всегда были проблемы (по крайней мере, по моему опыту), потому что у вас нет возможности заранее узнать, куда файл будет загружен в память, поэтому трудно добавить точку останова.
Вы можете попытаться добавить ручной вызов точки останова в свой код (который int3
). В C++ это будет:
asm {
int 3;
}
В C# есть метод для этого:
System.Diagnostics.Debugger.Break()
Попробуйте добавить в начало свою часть функции / кода (не забудьте выполнить компиляцию в режиме отладки).
Тогда вы просто начнете отлаживать приложение (.exe
) который загружает .dll
Файл и загруженная библиотека должны вызывать точку останова.