Мой сайт продолжает сбой IE, не могу отлаживать

У меня есть сайт, который внезапно начал сбой интернет-обозревателя.

Сайт загружается и начинает выполнять javascript, но где-то там взрывается механизм. Я даже не получаю сообщение об ошибке скрипта, оно просто вылетает. Я попытался вручную пройти каждую строку js с помощью встроенного отладчика, но тогда, конечно, проблема не возникает.

Если я выбираю отладку приложения при его сбое, я вижу следующее сообщение.

Необработанное исключение в 0x6c5dedf5 в iexplore.exe: 0xC0000005: Местоположение чтения нарушения доступа 0x00000090.

Топ 5 элементов в стеке вызовов выглядит следующим образом

Vgx.dll! 6c5dedf5 ()
[Кадры ниже могут быть неправильными и / или отсутствующими, символы не загружены для VGX.dll]
Vgx.dll! 6c594d70 ()
Vgx.dll! 6c594f63 ()
Vgx.dll! 6c595350 ()
Vgx.dll! 6c58f5e3 ()
mshtml.dll! 6f88dd17 ()

VGX.dll, кажется, является частью визуализации VML, и я на самом деле использую VML. Я не удивлен, потому что у меня было так много проблем с vml, атрибуты должны быть установлены в определенном порядке, иногда вы не можете установить атрибуты, когда у вас есть элементы, прикрепленные к DOM или наоборот (все недокументировано, кстати), но тогда проблемы обычно можно воспроизвести при отладке, но не сейчас :(

Проблема также возникает в режиме без плагинов.

Есть ли лучший подход, чем метод проб и ошибок, чтобы решить эту проблему?

Редактировать: Добавление консоли, выводящей каждую подозрительную модификацию в DOM, приводило к возникновению проблемы только иногда. (консоль также реализована в javascript на той же странице, я могу видеть вывод даже после сбоя, так как окно все еще видно) По-видимому, это какое-то состояние гонки.

Мне удалось отследить его еще дальше, и, похоже, это происходит, когда вы слишком быстро удаляете объект из DOM после его добавления. (скорее всего, только для vml-элементов с некоторым специальным атрибутом, дальнейшая попытка не предпринимается). И это не может быть исправлено путем добавления мертвого цикла перед removeChild (в любом случае, довольно плохое решение), страница должна отображаться браузер один раз после addChild, прежде чем вы можете вызвать removeChild. вздох

Ответы на вопрос(4)

Ваш ответ на вопрос