Есть ли способ отлаживать dll С++ из С# DllImport?
Интересно, есть ли способ отлаживать dll С++ из С# PInvoke в VS 2010. Я попытался прикрепить проект к приложению С#, но он не сработал - не остановился в точке останова.
Я также пытался записать что-либо с OutputDebugString в проекте С++, но ничего не печаталось при вызове PInvoke. Несмотря на эти проблемы, фактическая функция работает хорошо.
Любые советы будут оценены.
Ответы
Ответ 1
Оба требуют включения той же опции: Project > Properties > вкладка Debug > отметьте опцию "Включить неуправляемый отладочный код".
Теперь вы можете установить точку останова в собственном DLL-коде, она будет превращаться из полого в твердое, как только проект С# загрузит DLL. Выход OutputDebugString() будет выводиться в окно вывода благодаря использованию неуправляемого механизма отладки.
Ответ 2
Если вы запускаете отладчик С++ во время работы вашей программы, а затем перейдите в Debug- > Attach To Process- > Find your process и приложите к нему. Вы должны уметь его отлаживать.
Убедитесь, что вы скомпилировали свою DLL с помощью символов отладчика. (.pdb) и что они находятся в каталоге, из которого вы запускаете.
Ответ 3
При прикреплении измените значение "Прикрепить к" на "Родной". Процесс не должен запускаться под отладчиком управляемого кода - вместо "Отладка" используйте команду "Запуск" для запуска.
Кроме того, DLL необходимо скомпилировать с информацией об отладке для любой разумной отладки. Убедитесь, что вы не используете P/Invoking для сборки Release.
Однако OutputDebugString() должен работать независимо от режима отладки.