VC6 на Win 10 Отладка, когда DLL в другой DLL дает пользователю точку останова

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

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

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

Это появляется даже до вызова main. И исполняемый файл существует сразу же, даже до появления окна сообщения, поэтому нет трассировки стека для проверки. Естественно, я искал любые вызываемые конструкторы 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", но без изменений.

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

Есть ли у кого-нибудь совет?

-Скотти

1 ответ

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

Другие вопросы по тегам