Можно ли изменить значения переменных javascript во время отладки в Google Chrome?


Я отлаживаю приложение javascript (используя инструменты Chrome dev), и я хотел бы изменить некоторые значения переменных при переходе через код.

это вообще возможно?

Я пробовал и получил что-то вроде:

> modeline
1
> modeline=0
0             <<< seems to work but... 
> modeline
1             <<< ups!!

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

10 68

10 ответов:

почему этот ответ все еще получает upvotes?

на ответ Микаэля Майера, это больше не проблема, и мой ответ устарел (go() возвращает 30 после удаления с консоли). Это было исправлено в июле 2013 года, согласно сообщить об ошибке ссылка на которую дана выше в gabrielmaldi комментарий. Это тревожит меня, что я все еще получаю upvotes-заставляет меня думать, что upvoter не понимает ни вопроса, ни моего ответ.

Я оставлю свой оригинальный ответ здесь по историческим причинам, но go upvote Микаэль это вместо.


фишка в том, что вы не можете изменить локальную переменную непосредственно, но вы можете изменить свойства объекта. Вы также можете изменить значение глобальной переменной:

var g_n = 0;
function go()
{
    var n = 0;
    var o = { n: 0 };
    return g_n + n + o.n;  // breakpoint here
}
:
> g_n = 10
  10
> g_n
  10
> n = 10
  10
> n
  0
> o.n = 10
  10
> o.n
  10

проверяем результат go() после установки точки останова и запуска этих звонков в консоль, и вы обнаружите, что результат равен 20, а не 0 (но, к сожалению, не 30).

теперь это возможно в chrome 35 (сегодня по состоянию на 11 июля 2014 года). Я не знаю, какая версия позволила ему первым.

только что протестировал @ gilly3 пример на моей машине, и он работает.

  • Откройте консоль, в Sources вкладка Snippets добавить новый фрагмент, вставить в него следующий код:

    var g_n = 0; function go() { var n = 0; var o = { n: 0 }; return g_n + n + o.n; // breakpoint here }

  • щелкните правой кнопкой мыши имя фрагмента, нажмите кнопку "Выполнить" (это не запускает функцию хотя)

  • добавьте точку останова в оператор return.
  • в консоли ниже, типа go()
  • и изменять значения переменных, как показано ниже

function with local modification allowed.

и возвращенный результат g_n + n + o.n - 30 лет.

это признанная ошибка в инструментах Chrome Dev:

http://code.google.com/p/chromium/issues/detail?id=124206

Firebug, кажется, позволяет вам это сделать.

похоже, нет.

поставьте точку останова, когда она остановится переключитесь на консоль, попробуйте установить переменную. Он не ошибается, когда вы назначаете ему другое значение, но если Вы читаете его после назначения, он не изменяется. : -/

на самом деле есть обходной путь. Скопируйте весь метод, измените его имя, например originalName() на originalName2 (), но измените переменную внутри, чтобы взять любое значение, которое вы хотите, или передать его в качестве параметра.

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

Если метод вызывается автоматически, то вместо этого введите в консоль

originalName = null;
function originalName(original params..)
{
    alert("modified internals");
    add whatever original code you want
}

Я могу изменить значение переменной скрипта путем присвоения в консоли. Кажется, проще всего.

Я не знаю, почему команда chrome не позволяет эту глупую функцию ... но единственный способ изменить значения переменных с успехом-это изменить скрипт непосредственно в Редакторе chrome на вкладке "Источники" (это изменяет поведение вашего скрипта до тех пор, пока вы не обновите страницу), но эти изменения будут потеряны при обновлении, поэтому будьте осторожны.

У меня была та же проблема, пошел в "О Google Chrome" ->справка, и он сказал, что мне нужно перезагрузить браузер, чтобы получить последние обновления.

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

однако я заметил некоторые странности, что мне пришлось перешагнуть через некоторые несвязанные задания var, прежде чем я смог изменить текст в правом окне (область действия Переменные параметры.)

да! Наконец-то! Я просто попробовал его с Chrome, версия 66.0.3359.170 (официальная сборка) (64-бит) на Mac.

вы можете изменить значения в областях, как на первом рисунке, или с помощью консоли, как на втором рисунке.

Chrome debugger change values

enter image description here