Отладка нативного кода - PullRequest
4 голосов
/ 26 марта 2010

У меня есть служба C #, которая вызывает C DLL, которая была изначально написана в VC6.

В DLL есть ошибка, которую я пытаюсь проверить.

После получениякошмар, пытаясь заставить работать отладку Я в конечном итоге добавил dll в решение VS2005, содержащее службу C #, и добавил необходимые _CRT_SECURE_NO_WARNINGS.

Отладочная версия службы регистрируется с помощью инструмента 'installutil.exe'.

Я могу заставить отладчик выйти из строя непосредственно перед строкой, в которую вводится dll, путем вызова System.Diagnostics.Debugger.Break();.

Я нашел в сети некоторую инструкцию, касающуюся отладки неуправляемого кода,и включил флажок «Включить отладку неуправляемого кода», я также попытался включить Опции-> Отладка-> Собственный «Загрузить экспорт DLL» и «Включить отладку RPC» (даже если это не COM).Я также скопировал dll и .pdb отладки в тот же каталог bin, что и служба.

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

ОБНОВЛЕНИЕ : Я нашел Тип отладки в свойствах DLL и установил его как «Смешанный» в соответствии с предложением на нескольких сайтах, но безрезультатно.

ОБНОВЛЕНИЕ2 : Мой проект сейчасвыдает отладочную dll и pdb в тот же каталог, что и служба отладки.Все еще не могу отладить dll.

Ответы [ 3 ]

2 голосов
/ 26 марта 2010

Попробуйте установить неуправляемый код в качестве запускаемого проекта. Я знаю, что это не имеет смысла, но я помню, как это работало для очень похожего проекта.

Поскольку DLL не имеет ассоциированного исполняемого файла, при попытке ее запуска всплывает вопрос, какое приложение запустить. Перейдите к своему приложению на C #, и тогда все будет хорошо.

Счастливая отладка!

РЕДАКТИРОВАТЬ: это было какое-то время, но я думаю, что смешанный тип отладки правильный

0 голосов
/ 19 августа 2014

В Visual Studio 2013 есть обходной путь. Запустите приложение из строки cmd. При нажатии System.Diagnostics.Debugger.Break(); должно появиться окно отладчика Visual Studio Just-In-Time. Установите флажок «Вручную выберите механизмы отладки», нажмите «Да» и убедитесь, что флажок «Собственный» установлен. Нажмите «ОК». Теперь вы должны иметь возможность войти в собственный код, как если бы вы выполняли код из VS.

0 голосов
/ 09 апреля 2010

В конце я создал консольное приложение и заново создал все предыдущие вызовы, просто чтобы убедиться, что вызов будет действовать так же, как и в реальном сервисе, с фактическими параметрами, как только он туда попадет.

Я записал свое исправление и полученный код на мой сайт .

...