Отладка нативного кода
У меня есть служба C#, которая вызывает C DLL, которая была изначально написана на VC6.
В DLL есть ошибка, которую я пытаюсь проверить.
После кошмара, пытающегося заставить работать отладку, я в конечном итоге добавил dll к решению VS2005, содержащему C# Service, и добавил необходимые _CRT_SECURE_NO_WARNINGS
,
Отладочная версия сервиса регистрируется с помощью инструмента installutil.exe.
Я могу заставить отладчик сломаться как раз перед строкой, где вводится dll через вызов System.Diagnostics.Debugger.Break();
,
Я нашел в сети несколько инструкций, касающихся перехода к отладке неуправляемого кода, и установил флажок "Включить отладку неуправляемого кода". Я также попытался включить параметры-> Отладка-> Собственный "Загрузить экспорт DLL" и "Включить RPC". Отладка "(хотя это не COM). Я также скопировал отладочную dll и.pdb в тот же каталог bin, что и служба.
Однако неуправляемый код не вмешивается, что мне действительно нужно.
ОБНОВЛЕНИЕ: Я нашел Тип отладки в свойствах DLL и установил для него "Смешанный" в соответствии с рекомендациями на нескольких сайтах, но безрезультатно.
ОБНОВЛЕНИЕ 2: Мой проект теперь испускает отладочную dll и pdb в тот же каталог, что и служба отладки. Все еще не в состоянии отладить DLL.
3 ответа
В конце я создал консольное приложение и заново создал все предыдущие вызовы, просто чтобы убедиться, что вызов будет работать так же, как и в реальном сервисе, с фактическими параметрами, как только он туда попадет.
Я записал свое исправление и полученный код на моем сайте.
Попробуйте установить неуправляемый код в качестве запускаемого проекта. Я знаю, что это не имеет смысла, но я помню, как это работало для очень похожего проекта.
Поскольку DLL не имеет ассоциированного исполняемого файла, при попытке ее запуска появится всплывающее окно с вопросом, какое приложение запустить. Перейдите к своему приложению C#, и тогда вам будет хорошо идти.
Удачной отладки!
РЕДАКТИРОВАТЬ: это было некоторое время, но я думаю, что тип отладки Mixed является правильным
В Visual Studio 2013 есть обходной путь. Запустите приложение из строки cmd. когда System.Diagnostics.Debugger.Break();
Это означает, что должно появиться окно отладчика Visual Studio Just-In-Time. Установите флажок "Вручную выберите механизмы отладки", нажмите "Да" и убедитесь, что установлен "Собственный" механизм. Нажмите "ОК". Теперь вы должны иметь возможность войти в нативный код, как если бы вы выполняли код из VS.