Я пишу родную DLL, которая должна работать с rundll32.exe
(это обязано нашими клиентами). Я использую VS
Отладочные свойства для определения:
Command: c:\windows\system32\rundll32.exe
Command Argument: $(TargetPath) , ENTRY_POINT
где ENTRY_POINT
это экспортированная функция моей DLL, которая подчиняется rundll32.exe
интерфейс.
Эта настройка вызывает мою функцию, но не загружает никаких символов и, следовательно, не вызывает точку останова. Я узнал, что моя функция была вызвана только после вызова MessageBox
на его входе.
когда я использую свое собственное контейнерное приложение (просто exe
призвание Loadlibrary
, GetProcAddress
и ENTRY_POINT
сама функция) все точки останова срабатывают, и пошаговая отладка возможна как обычно.
что может вызвать такое поведение?
MessageBox () дает вам достаточно веревки для устранения этой проблемы. Когда он отобразится, используйте Debug + Break All, чтобы взломать отладчик. Далее используйте Debug + Windows + Modules, найдите DLL в списке. Щелкните правой кнопкой мыши и выберите «Информация о загрузке символа». Вы получите список всех каталогов, в которых отладчик искал ваш файл PDB. Убедитесь, что он присутствует в одном из них.
Кстати, ваши настройки командных аргументов не кошерные. Так должно быть "$(TargetPath)" ENTRY_POINT
, Двойные кавычки, чтобы избежать проблем с пробелами в имени пути, без запятой.
Короче: Все проблемы возникли из-за отладки 32Bit
DLL в 64Bit
среда.
Как видно из исходного вопроса и побочных вопросов, упомянутых в комментариях, у меня было несколько проблем здесь:
Причина в том, что упомянутое существо dll 32Bit
в то время как отладчик 64Bit
, Путь к rundll32.exe
взаимосвязано как 64Bit
версия. Что обычно вызывает WOW64
запустить подпроцесс 32Bit
версия — тем самым другой процесс, таким образом, отладчика нет.
Спасибо всем.