Значення "DebuggeeWouldRun: debuggee` хостинг: XXX 'запуститься "в консолі Firefox / Firebug


3

На моїй консолі Firebug на різних сайтах я бачу багато подібних повідомлень, включаючи те, що я намагаюся налагодити. breakOnError.jsвиявляється якийсь системний / файл Firebug, нічого спільного з жодним із сайтів, для яких це з'являється. Нічого очевидного я не бачу, що число 674 тут може стосуватися, хоча воно, здається, відображається на кількох сторінках (включаючи цю саму сторінку запитань):

DebuggeeWouldRun: debuggee `self-hosted:674` would run        breakOnError.js (line 105, col 13)`
                                                                       <system>

Консоль Firebug просто заповнює їх, якщо у вікні "Скрипт" увімкнено функцію " Перерва на винятки" , іноді навіть якщо я вмикаю її після завантаження сторінки зі швидкістю трохи більше однієї секунди. Жовтий, як попереджувальне повідомлення (це не помилка), але я не знаю, про що воно могло би попереджати мене.

введіть тут опис зображення

Я не можу знайти будь-якої зрозумілої інформації про те, що це таке або що це означає. Все, що навіть є майже актуальним, - це кілька питань підтримки Firefox / Mozilla ( 1249469 та 1252945 ), які обговорюють деякі дуже тонкі деталі впровадження ... що б це не було. Жодних підказок я не можу зрозуміти, що означає щось із цього насправді.

Що це, і що це означає?


Я виявив те, що схоже на можливе пояснення від того, кого я вважаю розробником Mozilla , але це дуже технічно (призначена аудиторія = інші розробники Firefox), і я не дуже розумію, що це насправді означає. Я думаю, це може означати, що Firefox скаржиться, тому що йому не подобається, як Firebug намагається перебрати перерву, і Firebug реагує на ці системні повідомлення як попередження консолі, а потім просто продовжує робити те, що робив?

Нещодавно я запустив реалізацію Debugger.DebuggeeWouldRun, яка є помилкою, яку видають, коли код налагодження намагається повторно ввести код налагодження, не проходячи блаженну "функцію виклику" (в даний час DFpeval і DOpexecuteInGlobal) 1 . Ці повторні записи є причиною того, що налагоджувач справді не може призупинити налагодження.

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

... тоді є цей коментар, завдяки якому я думаю, що це, можливо, якийсь симптом химерності Firefox, про який мені не потрібно хвилюватися, але знову ж таки я не розумію, що це означає, особливо що це означає " розміщений код "у цьому контексті (чи вважатиметься розширення, як Firebug, як власне розміщення, оскільки воно знаходиться на моїй машині?), і я поняття не маю, що таке" відділення для налагодження ":

Одним із недоліків є те, що всі власні коди у відділенні для налагодження заборонені. Це означає, що деякі операції, які насправді мають бути дозволені, попереджаються / забороняються.


Ramhound у коментарях припустив, що це може бути помилка Firebug (ugghhh), і запитав про рядок коду, про який йдеться у повідомленні.

Очевидно, якщо є помилка, це питання про розробників Firebug, це не місце, щоб спробувати її виправити. Я розміщую повідомлення, якщо це допоможе комусь пояснити, що насправді означає вміст повідомлення ("налагоджувач", "власне розміщення: 674", "працює"). Це функція навколо рядка, я позначив рядок 105 коментарем:

onDebuggerPaused: function(context, event, packet)
{
    // Check the packet type, only "exception" is interesting in this case.
    var type = packet.why.type;
    if (type != "exception")
        return;

    // Reset the break-on-next-error flag after an exception break happens.
    // xxxHonza: this is how the other BON implementations work, but we could reconsider it.
    // Another problem is that the debugger breaks in every frame by default, which
    // is avoided by reseting of the flag.
    this.breakOnNext(context, false);

    // At this point, the BON flag is reset and can't be used anymore in |shouldResumeDebugger|.
    // So add a custom flag in packet.why so we know that the debugger is paused because of
    // either the Console's "Break On Next" or the Script's "Break On Exceptions" option.
    packet.why.fbPauseDueToBONError = true;

    // Get the exception object.
    var exc = DebuggerLib.getObject(context, packet.why.exception.actor);
    if (!exc)
        return;

    Trace.sysout("BreakOnError.onDebuggerPaused;", {exc: exc, packet: packet});

    // Convert to known structure, so FirebugReps.ErrorMessage.copyError() works.
    var error = {
        message: exc + "", // <<<<<<<<<<<<<<<<<<<<<<<<<<<< THIS IS LINE 105 <<<<<<<<<<<<<<<<
        href: exc.fileName,
        lineNo: exc.lineNumber
    };

    var lineNo = exc.lineNumber - 1;
    var url = exc.fileName;

    // Make sure the break notification popup appears.
    context.breakingCause =
    {
        message: error.message,
        copyAction: Obj.bindFixed(ErrorMessage.copyError, ErrorMessage, error),
        skipAction: function addSkipperAndGo()
        {
            // Create a breakpoint that never hits, but prevents BON for the error.
            var bp = BreakpointStore.addBreakpoint(url, lineNo);
            BreakpointStore.disableBreakpoint(url, lineNo);

            Debugger.resume(context);
        },
    };
},

1
Це звучить як помилка JavaScript в Firebug.
Рамхаунд

2
О баггер, помилка javascript у моєму налагоджувачі javscript. Де мій налагоджувач JavaScript налагоджувач ...
user568458

Тож щось кидає виняток, я припускаю, що рядок 105 від breakonError.js не містить жодних підказок? Типовий з кодом виключення.
Рамхаунд

@Ramhound Я додав код. Я можу помилятися, але я не думаю, що це руйнування або збій лінії, я думаю, що рядок 105 цього коду Firebug - це просто код, який генерує попереджувальне повідомлення. Схоже, він намагається сказати мені щось про поточний статус Firebug ... Я просто не знаю, що.
користувач568458

Відповіді:


3

"Налагодження" - це те, що налагоджено. У випадку Firefox, що це код JavaScript, запустіть через налагоджувач, точніше код JavaScript веб-сайту. (Це також може бути внутрішній код JavaScript у браузері.)

API налагодження Firefox описаний на MDN , хоча він також дуже технічний і не пояснює термінологію. Існує також деякий опис Debugger.DebuggeeWouldRunвинятку , який трохи уточнює речі, якщо ви будете мати на увазі визначення вище:

Деякі налагоджувальні операції, які, як видається, просто перевіряють стан налагодження, можуть насправді призвести до запуску коду налагодження. Наприклад, зчитування змінної може запускати функцію getter у глобальному масштабі чи на операнді виразу; і отримання дескриптора властивостей об'єкта запустить пастку обробника, якщо об'єктом є проксі. Щоб захистити цілісність налагоджувача, це можуть робити лише методи, заявленою метою яких є запуск коду налагодження. Ці методи називаються функціями виклику, і вони дотримуються певних загальних умов, щоб безпечно повідомляти про поведінку налагоджувача. Для інших методів, якщо їх нормальна робота призведе до запуску коду налагодження, вони кидають екземпляр винятку Debugger.DebuggeeWouldRun.

Отже, застосувавши це до Firebug, це означає, що код налагодження Firebug не тільки перевіряє код сторінки, але може фактично (випадково) виконати код сторінки. Простий приклад:

<script>
var obj = {
  i: 0,  
  get counter() {
    return this.i++;
  }
}
</script>

Це збільшує iкожен раз, коли викликається obj.counter геттер . Наприклад, якщо ви оглянете objзмінну на бічній панелі Firebug's Watch , ви побачите, що лічильник збільшується лише тому, що доступ до нього має Firebug:

Збільшене значення лише зателефонувавши геттеру

Сказавши це, я не бачу винятків, згаданих вами, навіть коли налаштування javascript.options.throw_on_debuggee_would_runта javascript.options.dump_stack_on_debuggee_would_run, як згадується в потоці групи Mozilla , встановлені на true(які встановлені falseза замовчуванням).
І я пропоную вам встановити ці два налаштування, falseякщо ви не хочете бачити, як ці винятки заносяться на консоль.


1
Чудова відповідь, дякую. Будь-яка ідея, що self-hosted:674може бути? Я здогадуюсь 674-й файл js, який Firefox читає з моєї власної машини і тому є частиною Firebug; а інші 673 - це різні частини самого Firefox, Firebug та інших розширень Firefox?
user568458

1
На MDN є деякий опис про значення "власників" , хоч і знову дуже технічний. Схоже, що власне розміщення означає деякий внутрішній код браузера, хоча я думаю, що потрібна людина пояснить це Тілл Шнайдерайт , який написав цю статтю. Відповідно до коду, який видає виняток, 674 є номер рядка у цьому файлі.
Себастьян Зартнер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.