отладка в смешанном режиме с собственным C ++, управляемым C ++ Cli и C # решением - PullRequest
27 голосов
/ 10 мая 2011

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

Ответы [ 3 ]

33 голосов
/ 19 июня 2013

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

  1. В приложении C # отметьте Allow unsafe code на вкладке Build и Enable unmanaged code debugging на вкладке Debug проектаproperties.
  2. Для проекта C ++ / CLI dll. На вкладке «Отладка свойств» установите для параметра «Тип отладчика» значение Mixed
.
8 голосов
/ 11 мая 2011

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

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

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

2 голосов
/ 21 августа 2013

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

1) откройте ваш неуправляемый исходный файл через Файл-> Открыть-> Файл (т.е. мой source.cpp)

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

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

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

...