Могу ли я заставить отладчик Internet Explorer разбиться на долго работающий код JavaScript? - PullRequest
7 голосов
/ 19 марта 2010

У меня есть страница с византийским количеством кода JavaScript. Только в Internet Explorer и только в версии 8 я получаю предупреждение с длинным сценарием, которое могу надежно воспроизвести. Я подозреваю, что это обработчики событий, запускающие себя в бесконечном цикле.

Инструменты разработчика ужасно хромают под тяжестью запускаемого скрипта, но я, кажется, могу получить журнал, в котором говорится, какую строку скрипта он выполнял, когда я прерывал работу, но это неизбежно верстка кода ExtJS , который мы используем, и я не могу сказать, где он находится в моем стеке кода.

Способ работы стека вызовов сработает, но желательно, чтобы я мог просто взломать отладчик, когда получу длинное предупреждение сценария, чтобы я мог просто пройти по стеку.

Опубликован похожий вопрос, но даны ответы для не-правильного инструмента или не очень полезного совета по устранению половины моего кода за раз при двоичной охоте на бесконечный цикл. Если бы мой код был достаточно простым, чтобы я мог это сделать, он, вероятно, не получил бы бесконечный цикл. Если бы я мог воспроизвести проблему в Firebug , я бы, вероятно, был бы намного счастливее.

Ответы [ 2 ]

3 голосов
/ 23 марта 2010

Вот что я бы сделал:

  1. Перейдите на http://www.microsoft.com/whdc/devtools/debugging/default.mspx и установите средства отладки для Windows. Вы хотите запустить WinDBG, когда он установлен.

  2. Выполните шаги, описанные в http://www.microsoft.com/whdc/devtools/debugging/debugstart.mspx#a, чтобы установить соединение с сервером символов и автоматически загрузить символы на локальный диск (c: \ websymbols - или любой другой).

  3. Запустите IEXPLORE.EXE под WinDBG. Файл справки должен помочь вам в этом, если это необходимо. Вам понадобится пара команд после запуска Internet Explorer и тому подобное. Во-первых, продолжайте и запустите этот большой сценарий.

  4. Взлом в отладчике (нажатие CTRL-SCROLLLOCK).
    а. Выполните команду LN, чтобы "список ближайших", чтобы получить загруженные файлы DLL. Надеюсь, вы загрузите JSCRIPT.DLL в память.
    б. Введите .reload /f, чтобы принудительно перезагрузить все символы. Это займет некоторое время. Теперь, после того, как это будет сделано, введите LN еще раз, и вы увидите, что соответствующий файл JSCRIPT.PDB загружен в вашу систему в каталоге символов, который вы установили ранее.

  5. В зависимости от того, что вы хотите сделать, вам может потребоваться перезапустить отладчик, но вы можете сделать это: после первоначального перерыва при загрузке WINDBG, вы можете набрать «sxe ld jscript.dll», и он сломается когда jscript.dll грузит.

  6. Это сложная часть, потому что после загрузки у вас нет кода для jscript.dll, но у вас есть правильные символы (если они не загружены, то перезагрузите их с помощью .reload /f) , Вы можете просмотреть доступные функции, набрав «x! Jscript», и вы получите полный список всех функций и переменных.

  7. Выберите один, установите точку останова, и тогда вы сможете отслеживать, что происходит с вашим сценарием.

  8. Если ничего не достигнуто, с помощью .reload /f process вы можете загрузить соответствующие jscript.pdb файлы, загруженные в вашу систему. Возможно, вы могли бы использовать их вместе с Visual Studio для выполнения дополнительной отладки таким образом, но я не уверен, насколько хорошо это будет работать.

0 голосов
/ 22 марта 2010

Я уже сталкивался с этим раньше, и мне повезло с включением инструментов разработчика вместе с Visual Studio. При возникновении ошибки загрузка страницы останавливается, и я могу затем загрузить Visual Studio, чтобы увидеть конкретную строку, вызывающую проблему.

Этот сайт содержит некоторую информацию об использовании Visual Studio вместе с отладчиком Internet Explorer: Использование Visual Studio для отладки JavaScript в IE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...