VC6 на Win 10 Отладка, когда DLL в другой DLL дает попадание в точку останова пользователя - PullRequest
0 голосов
/ 07 февраля 2020

Я только что установил машину Windows 10, так как Windows 7 теперь отбрасывается ... вместе со старым classi c VC6. Плюс Пакет обновления 6 и Platform SDK установлены. Я использовал его таким образом, без проблем на моей машине Windows 7 в течение десятилетий (слишком долго, чтобы go, почему бы не перейти на VS 2010, 2012, 2015, 2017, 2019, yada yada, yada ... Тема для другой дискуссии)

Я поднял существующий проект, в котором я работал до конца года. Большой exe, несколько DLL в нем, объекты C ++ и т. Д. c ... До 1 января все работало нормально.

На моей новой установке Windows 10, когда я пытался запустить ее в отладчике, выдается ошибка:

User Breakpoint Called

Это появляется даже до вызова основного . И исполняемый файл сразу же существует, даже до появления окна сообщения, поэтому нет трассировки стека для проверки. Естественно, я искал любые конструкторы C ++, которые могли бы быть вызваны, которые могли бы повредить вещи. Но их не было. (и в любом случае у меня не было проблем на моем Windows 7 компьютере)

Я сузил его до следующего условия: Основной EXE статически связан с LIB / DLL. Это dll статически связан с другой библиотекой LIB / DLL. Когда я удаляю нижележащую зависимость DLL, я могу запустить исполняемый файл в отладчике.

Я нашел несколько проектов, которые испытывают это.

У меня есть тестовый проект (файлы dsw и dps), который демонстрирует это (по крайней мере, на моей машине Windows 10), если кто-то захочет посмотреть на него. Это разделено ни на что, кроме раковин. EXE-файл, связанный с DLL, который связан с другой DLL. Если я уберу внутреннюю зависимость DLL на этапе компоновки, исполняемый файл с одной DLL будет работать нормально.

Кроме того, EXE также будет работать вне отладчика. Отладка и выпуск.

Наконец, когда я устанавливаю конфигурацию для выпуска, она также запускается в IDE, но не имеет отладочной информации. Однако, если я включаю отладочную информацию в сборках выпуска, она снова вылетает перед запуском.

Так что, очевидно, в windows 10 есть что-то, что мешает запуску контейнера отладки. Я также отключил "Fault Tolerant Heap Shim", но без изменений.

Кто-нибудь испытывал что-то подобное?

У кого-нибудь есть советы?

-Scotty

1 Ответ

0 голосов
/ 15 февраля 2020

Я живу без нашего отладчика V6 уже несколько лет, и после еще одного поиска в надежде найти решение, в котором я оказался, я наконец нашел способ и хотел им поделиться. Для проектов, которые выдают ошибку точки останова пользователя и сразу выходят при запуске, запустите их с помощью Build-> Execute (ctrl + F5), затем выполните Build-> Start Debug-> Attach Process. Вы не сможете ничего сделать с запуском, но вы можете установить точки останова на таймеры или команды, чтобы войти. Я полагаю, вы могли бы поставить длинный сон в качестве первого вызова в вашем главном во время отладки, чтобы дать вам шанс получить и установите там свои точки останова.

...