Подтвердить что ты не робот

Отладка в смешанном режиме с родным С++, управляемым С++ cli и С# решением

У меня есть многопоточный проект, над которым работает, а проект запуска установлен в проект С#, который запускает мой пользовательский интерфейс. Затем существует целая серия базовых исходных проектов С++, которые связаны с С# управляемыми проектами С++/CLI. Я включил в проект запуска С# "Включить неуправляемый отладочный файл", и когда я пытаюсь отладить собственный код, я могу установить точки останова, которые я установил. Тем не менее, он зависает после того, как я попытаюсь запустить его снова и попытаюсь снова нажать точку разрыва. Например, если у меня есть цикл, я пытаюсь проникнуть внутрь него на каждой итерации, после второй итерации программа зависает, и мне нужно принудительно завершить работу. Im работает в Visual Studio 2010. Отладка начала доказывать не слишком полезную с такой скоростью, есть ли способ предотвратить эту проблему?

4b9b3361

Ответ 1

Когда я хочу отлаживать собственный код, а также С++/CLI, я делаю следующее:

  • В приложении С# отметьте Allow unsafe code на вкладке "Сборка" и Enable unmanaged code debugging на вкладке "Отладка" свойств проекта.
  • Для проекта dll С++/CLI на вкладке "Отладка" свойств "Отладка" введите Mixed

Ответ 2

У нас также были проблемы с отладкой сложных смешанных программных приложений и выяснили, что Visual Studio не настолько надежна в этих ситуациях. Мои предложения были бы следующими:

  • Если вы пытаетесь отладить часть собственного кода, попробуйте использовать собственный проект в качестве приложения для запуска отладчика. В настройках проекта на вкладке "Отладка" задано значение "Тип отладчика" на "Смешанный", для нас это иногда помогало (например, собственный проект может быть DLL, просто установите основной EXE в качестве цели отладки в настройках проекта);

  • Используйте WinDbg, с ним вы можете более надежно отлаживать и управляемые/неуправляемые приложения с смешанным кодом,

Ответ 3

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

1) откройте свой неуправляемый исходный файл через File- > Open- > File (например, my source.cpp)

2) установите там точку останова

3) начните отладку управляемого кода (кнопка воспроизведения)

Он должен прорваться непосредственно в ваш неуправляемый код... по крайней мере, он работает для меня...