Visual Studio 2012 Express, отладка explorer.exe - нет попадания в точку останова

У меня проблема с отладкой надстройки SolidWorks Enterprise PDM. Я не знаю, как надстройки обрабатываются в EPDM, но проблема, похоже, связана с Visual Studio - возможно, у кого-то еще есть аналогичная проблема с надстройками других платформ.

Добавление надстройки отладки (чтобы использовался последний источник): PDM отладочная надстройка

В Visual Studio 2010 Express нет проблем - убить проводник, запустить его, присоединить к нему и: VS2010 отладка прошла успешно

Я не мог добиться того же с Visual Studio 2012 Express. Хотя кажется, что это проводник отладки (файлы доступны только для чтения, отображается кнопка остановки отладки), он не достигает точек останова: Ошибка отладки VS2012

Я работаю на 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 работает в управляемом режиме только иногда: 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 Файл и загруженная библиотека должны вызывать точку останова.

Другие вопросы по тегам