Можно ли изменить значения переменных javascript при отладке в Google Chrome? - PullRequest
73 голосов
/ 05 января 2011

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

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

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

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

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

Ответы [ 10 ]

56 голосов
/ 11 июля 2014

Теперь это возможно в 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 }

  • Щелкните правой кнопкой мыши имя фрагмента, выберите «Выполнить» (хотя функция не запускается)

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

function with local modification allowed.

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

39 голосов
/ 09 февраля 2011

Почему этот ответ до сих пор набирает голоса?

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

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


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

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).

7 голосов
/ 05 апреля 2013

Это признанная ошибка в Chrome Dev Tools:

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

4 голосов
/ 25 июля 2011

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

3 голосов
/ 05 января 2011

Похоже, нет.

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

2 голосов
/ 29 мая 2018

Да! В заключение! Я только что попробовал это с Chrome, Версия 66.0.3359.170 (Официальная сборка) (64-разрядная версия) на Mac.

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

Chrome debugger change values

enter image description here

2 голосов
/ 14 апреля 2015

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

2 голосов
/ 08 декабря 2012

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

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

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

originalName = null;
function originalName(original params..)
{
    alert("modified internals");
    add whatever original code you want
}
1 голос
/ 18 февраля 2013

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

0 голосов
/ 22 мая 2013

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

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

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

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