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

Есть ли способ отлаживать dll С++ из С# DllImport?

Интересно, есть ли способ отлаживать dll С++ из С# PInvoke в VS 2010. Я попытался прикрепить проект к приложению С#, но он не сработал - не остановился в точке останова.

Я также пытался записать что-либо с OutputDebugString в проекте С++, но ничего не печаталось при вызове PInvoke. Несмотря на эти проблемы, фактическая функция работает хорошо.

Любые советы будут оценены.

4b9b3361

Ответ 1

Оба требуют включения той же опции: Project > Properties > вкладка Debug > отметьте опцию "Включить неуправляемый отладочный код".

Теперь вы можете установить точку останова в собственном DLL-коде, она будет превращаться из полого в твердое, как только проект С# загрузит DLL. Выход OutputDebugString() будет выводиться в окно вывода благодаря использованию неуправляемого механизма отладки.

Ответ 2

Если вы запускаете отладчик С++ во время работы вашей программы, а затем перейдите в Debug- > Attach To Process- > Find your process и приложите к нему. Вы должны уметь его отлаживать.

Убедитесь, что вы скомпилировали свою DLL с помощью символов отладчика. (.pdb) и что они находятся в каталоге, из которого вы запускаете.

Ответ 3

При прикреплении измените значение "Прикрепить к" на "Родной". Процесс не должен запускаться под отладчиком управляемого кода - вместо "Отладка" используйте команду "Запуск" для запуска.

Кроме того, DLL необходимо скомпилировать с информацией об отладке для любой разумной отладки. Убедитесь, что вы не используете P/Invoking для сборки Release.

Однако OutputDebugString() должен работать независимо от режима отладки.