Как установить контрольную точку данных в смешанной (С#/С++) отладке?
Я запускаю свою программу на С#, которая затем вызывает некоторый неуправляемый С++.
Когда я разбиваю строку на неуправляемом С++, пункт меню "Новая точка останова данных" неактивен.
В любом случае?
Ответ 1
Чтобы установить точку останова данных в нативной части процесса смешанного режима, см. ответ отправленный jyoung.
Visual Studio отключает точки останова данных при запуске чего-либо, кроме чистого, собственного кода. См. эту статью для частичного объяснения, почему от диспетчера программ VS.
Ответ 2
Чтобы сделать это, мне пришлось:
установить неуправляемую dll в качестве проекта запуска
установить управляемую программу в качестве команды запуска
установить режим отладки как Родной
"выполнить прерывание" или нажать точку останова, чтобы вы были в состоянии "отладки"
yech
Ответ 3
Предлагаемое решение не работает все время. Даже при отладке в режиме Native с программой, разбитой в Native-фрагменте кода, при попытке установить "Новая точка останова данных" появляется всплывающее окно . Точка останова не может быть установлена. Точки останова данных не поддерживаются в Common Language Runtime "
Альтернативой является добавление контрольных точек данных из кода напрямую. См. Статью здесь.
Это хорошо работает в смешанном режиме, для этого требуется только активный режим отладки (как указано выше)
Ответ 4
Очень полезным трюком, который работает повсюду, является вызов контрольных точек из кода в особых условиях:
If (Condition)
System.Diagnostics.Debugger.Break()