Отладка собственной dll с помощью rundll32.exe, не удается загрузить символы

Я пишу родную 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 сама функция) все точки останова срабатывают, и пошаговая отладка возможна как обычно.

что может вызвать такое поведение?

2

Решение

MessageBox () дает вам достаточно веревки для устранения этой проблемы. Когда он отобразится, используйте Debug + Break All, чтобы взломать отладчик. Далее используйте Debug + Windows + Modules, найдите DLL в списке. Щелкните правой кнопкой мыши и выберите «Информация о загрузке символа». Вы получите список всех каталогов, в которых отладчик искал ваш файл PDB. Убедитесь, что он присутствует в одном из них.

Кстати, ваши настройки командных аргументов не кошерные. Так должно быть "$(TargetPath)" ENTRY_POINT, Двойные кавычки, чтобы избежать проблем с пробелами в имени пути, без запятой.

2

Другие решения

Короче: Все проблемы возникли из-за отладки 32Bit DLL в 64Bit среда.

Как видно из исходного вопроса и побочных вопросов, упомянутых в комментариях, у меня было несколько проблем здесь:

  1. Отладчик не присутствует в процессе, который он предположительно запустил.
  2. При прикреплении вручную символы не загружались.
  3. При нажатии «Break All» процесс оказался в тупике.

Причина в том, что упомянутое существо dll 32Bit в то время как отладчик 64Bit, Путь к rundll32.exe взаимосвязано как 64Bit версия. Что обычно вызывает WOW64 запустить подпроцесс 32Bit версия — тем самым другой процесс, таким образом, отладчика нет.

Спасибо всем.

1

По вопросам рекламы [email protected]