Прошу прощения, я снимаю отметку о решении. Ваш ответ не решает проблему: сейчас у меня этот баг происходит и под gcc, и под g++, и данный флаг ничем не помогает. Это какие-то кэши, которые где-то оседают во временных папках (виртуальной среды ucrt64?), и у меня нет возможности их очистить.
Поставил "-O0" как вы предложили, но нумерация строк всё так же сбоит. Значит или дело не в оптимизации в данном случае, или обёртка от VSCode игнорирует часть флагов в режиме отладки по каким-то своим причинам...
Кстати, проблема с тем, что отмечаются не те строчки, имеет место даже тогда, когда я перед отладкой делаю обычную компиляцию и запуск. Это тоже как-то связано с оптимизациями?
На самом деле, есть и ещё одна проблема, но возможно стоит создать под неё отдельный вопрос. Полученные при компиляции .exe файлы не запускаются через проводник. В смысле, окно командной строки мелькает на долю секунды, и тут же закрывается.
Те методы, которые я использовал в универе, чтобы оставить окно открытым, сейчас при компиляции у меня почему-то не работают. Впрочем, когда я запускаю приложение при открытой VS Code в режиме без отладки, этой проблемы нет: окно остаётся на экране, и есть надпись "Нажмите любую клавишу . . .", видимо потому, что там неявно всё это обёрнуто в .bat скрипт с вызовом pause.
Пожалуйста, не предлагайте поставить Visual Studio и снести VS Code: у меня сейчас нет места на системном диске, нет места на остальных логических дисках, чтобы их уменьшить, и нет денег на новый физический диск. А Visual Studio требует 8-9 Гб минимум даже в комплектации только под C/C++, я смотрел уже через мастер установки. Кроме того, там нет возможности поставить всё не на диск C:\, на диске C:\ понадобится 3-4 Гб в любом случае.
1. Если я добавляю к проблемной строке комментарий, ошибка не уходит - видимо, её причина выше по коду
2. Если полностью удалить ту строчку, ошибка также не уходит
Можно взять для примера строку 4. Что я вижу там: есть две внешние двойные кавычки, внутри ряд одиночных по парам, и ещё две экранированные двойные. Тем не менее, если даже оставить только верхушку скрипта, интерпретатор ругается на эту строку.
Кстати, основную задачу я успешно решил. Есть ещё маленький нюанс: если после символа @ домен выше 2-ого уровня (как например мой провайдер даёт всем адреса формата user@mail.company.net), то перед проверкой MX записей нужно оставить только два уровня, то есть проверять company.net
Daemon23RUS, кстати, я удалил куки для обоих доменов и обновил вкладку с исходником, чтобы убедиться, что пустое содержимое приходит не из-за кук. Ничего не поменялось.
UPD: поменялось, вы были правы. Я открывал целевой домен, а не исходный. Там действительно есть скрипт. И он ставит куку, в которой содержится некий IP адрес. Вот только у меня есть вопрос, почему это делают через куку, а не отправку HTTP кода или через редирект внутри тега script (например, location.reload)?
Daemon23RUS, да, я не подумал, что JS может удалить весь DOM. Да, вы правы совершенно, такое возможно. Но есть нюанс: когда я получаю содержимое через Insomnia, никакого JS там нет от слова совсем. И в Хроме его тоже нет (чтобы вы не сказали про проверку User-Agent): достаточно нажать Ctrl+U, придёт то же самое содержимое, что приходит в Insomnia - при нажатии этой комбинации браузер перекачивает контент, а не берёт кэшированную версию).
Так что я всё ещё не понял механизма. А главное - если JS там правда бы был, зачем кому-то его прятать?