Отладка на родном C / Managed C ++
-
05-07-2019 - |
Вопрос
У меня есть родной C Dll, который вызывает LoadLibrary для загрузки другого Dll, у которого включен флаг / clr. Затем я использую GetProcAddress, чтобы получить функцию и вызвать ее на динамически загруженной dll. Я хотел бы войти в динамическую библиотеку в отладчике, но символы никогда не загружаются. Есть идеи?
И я должен был сказать, что использую Visual Studio 2008.
Обновление: благодаря нескольким советам ниже, я изменил отладку проекта на Mixed. Это не сработало, но я думаю, что знаю почему. Я разрабатываю надстройку к существующему приложению. Приложение, к которому я подключаюсь, запускает один exe, затем запускает другой. Поэтому я должен использовать «Присоединить к процессу» запустить отладчик. Я предполагаю, что запуск отладчика таким способом по умолчанию будет "Авто". Есть ли способ изменить поведение VS по умолчанию на использование " Mixed " отладки?
Решение
Это из VS2008, но если я правильно помню, VS2005 был похож. В свойствах собственного проекта в разделе «Свойства конфигурации -> Отладка» есть «Тип отладчика» который установлен на "Авто" по умолчанию. Вам нужно изменить его на «Смешанный», потому что VS не достаточно умен, чтобы понять, что вам нужна управляемая отладка
Другие советы
У меня был неоднозначный опыт создания подобных вещей в VisualStudio. Вы можете рассмотреть возможность использования ProcMon, чтобы увидеть, где VisualStudio ищет файл PDB. В качестве альтернативы вы можете попробовать использовать WinDbg. Кажется, он лучше справляется с загрузкой символов, а если нет, вы можете явно загрузить их самостоятельно. Использование WinDbg включает в себя крутой курс обучения, но если вы сейчас тратите время, разве оно того не стоит?
Вы также можете запустить exe-файл самостоятельно и из источника управляемого dll подключиться к процессу для его отладки.
Измените dll в смешанном режиме, создав исключение CLR, в котором он вводит первый код, который вас интересует в отладке. Это должно дать вам возможность запустить управляемый отладчик.
В VS2005 для каждого проекта предусмотрены опции, позволяющие включать собственные отладчики и отладчики CLR. Возможно, вам потребуется включить отладчик CLR для собственного проекта DLL, из которого вы запускаете отладчик.