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