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

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

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

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

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

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

10 ответов


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

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

Я оставлю свой первоначальный ответ здесь по историческим причинам, но перейти 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