Подтвердить что ты не робот

Контрольные точки отладки Chrome javascript ничего не делают?

Похоже, я не могу понять инструмент отладки Chrome.

У меня хромированная версия 21.0.1180.60 м.

Шаги, которые я сделал:

  • Я нажал ctrl-shift-i, чтобы открыть консоль.
  • Нажав на "Источники", выберите соответствующий файл javascript, который я хочу отлаживать.
  • Я установил точки останова, где я хочу, чтобы код остановился, поместив синий тег на желоб рядом с строкой слева.
  • Я нажал кнопку на моей веб-странице (которая представляет собой страницу с предоставлением php), которая инициирует код javascript.
  • Код успешно завершился без остановки.

Я также заметил, что Watch Expressions тоже не работают. Он продолжает говорить мне, что переменная, которую я хочу посмотреть, это undefined.

Дальнейшее тестирование показало, что это мой код, вызывающий потерю точки останова. Кажется, что он не работает на "$ (" # frmVerification "). Submit (function() {" line. Он не входит в контрольные точки внутри этой функции().

Ниже:

//function to check name and comment field 
var test = "this is a test";
var test2 = "this is another test";

function validateLogin(){
    //if(userEmail.attr("value") && userPass.attr("value"))
        return true;
    //else
        //return false;
}

//onclick on different buttons, do different things.
function ajaxRequest(){

}
$(document).ready(function(){
  //When form submitted
    $("#frmVerification").submit(function(){
        var username = $("#username");
        var token = $("#token");
        var action = $("#action");
        var requester = $("#requester");
        if(validateLogin()){
            $.ajax({
            type: "post",
            url: "verification.php",
            data: "username="+username.html()+"&token="+token.val()+"&action="+action.val()+"&requester="+requester.val(),
            success: function(data) {
                try{
                    var jsonObj = $.parseJSON(data); //convert data into json object, throws exception if data is not json compatible
                    if(jsonObj.length > 0){//if there is any error output all data
                        var htmUl = $('<ul></ul>');
                        $.each(jsonObj, function(){
                            htmUl.append('<li>' + this + '</li>');
                        });
                        $("#errOut").html(htmUl);
                    }else{
                        alert("Your account is now activated, thank you. If you have already logged in, press OK to go to the home page. If not, you must log in first.");
                        window.location.replace("home.php");
                    }
                }
                catch(e){//if error output error to errOut]
                    $("#errOut").html("PHP module returned non JSON object: <p>"+data+"</p>");
                }
            }
        });
    }
    else alert("Please fill UserName & Password!");
        return false;
    });
});
4b9b3361

Ответ 1

Я не уверен, почему ваши точки останова не попадают, но один надежный способ войти в ваш код - напечатать

debugger;

где вы хотите, чтобы код был остановлен, а затем снова запустить с открытием окна инструментов Chrome.


Только одна маленькая вещь, о которой нужно знать, обязательно очистите ее после завершения и удалите строки отладчика. Если вы запускаете файлы JavaScript через компрессор YUI, существование строки debugger; приведет к ошибке.

Ответ 2

Это поздний ответ, но у меня была та же проблема, но ответ был другим.

В моем случае в моем коде была ссылка на sourceURL:

//@ sourceURL=/Scripts/test.js

Когда этот файл Javascript минимизируется и загружается браузером, он обычно сообщает Chrome Dev Tools, где находится незавершенная версия.

Однако, если вы отлаживаете незавершенную версию, и эта строка существует, Chrome Dev Tools отображает этот путь sourceURL вместо "обычного" пути.

Например, если вы работаете локально на веб-сервере, то на вкладке "Источники" в Chrome Dev Tools путь к указанному файлу JS будет http://localhost/Scripts/test.js

Если test.js имеет это внизу

//@ sourceURL=/Scripts/test.js

тогда точки останова будут работать, только если путь к файлу /Scripts/test.js, а не полный URL-адрес http://localhost/Scripts/test.js

В Chrome 38, следуя моему примеру выше, если вы посмотрите на вкладку Sources, каждый файл запускается с http://localhost/, поэтому при нажатии на test.js Chrome загружает http://localhost/Scripts/test.js

Вы можете поместить все нужные вам точки останова в этот файл, и Chrome никогда не достигнет ни одной из них. Если вы поместите точку останова в свой JS до того, как он вызовет какую-либо функцию в test.js, а затем войдете в эту функцию, вы увидите, что Chrome открывает новую вкладку, путь которой /Scripts/test.js. Размещение точек останова в этом файле остановит выполнение программы.

Когда я избавился от строки @sourceURL из файла JS, все снова работает нормально (то есть так, как вы ожидаете).

Ответ 4

У меня возникла аналогичная проблема. Точки останова, где не работает, если я не использовал debugger;. Я исправил проблему с точки останова с помощью "Восстановить значения по умолчанию и перезагрузить". Он находится в инструментах разработчика Chrome, настройках, восстанавливает значения по умолчанию и перезагружается.

Ответ 5

Убедитесь, что script с "отладчиком"; выражение в нем не черное с Chrome. Вы можете перейти на вкладку "Источники", чтобы проверить и отключить черный ящик, если это так.

EDIT: Добавлен снимок экрана.

Как отключить черную клавиатуру.

Ответ 6

Я встречался это несколько раз, сначала он хорошо работает по локальному хосту, внезапно точки останова не работают, я переключаюсь на 127.0.0.1, затем он работает снова. Надежда помогает.

Ответ 7

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

Сценарий:

У меня есть одна страница, которая использует два мода загрузочных модуля, которые поступают из одного источника и одного набора файлов javascript (blueimp awesome jquery fileupload).

  • BS Modal 1 отображается на загрузке страницы (через php) и всегда присутствует на странице. Он используется для добавления новой связанной записи. (CakePHP.... думаю, что тип SalesForcey типа)

  • BS Modal 2 используется для редактирования существующих связанных записей, и содержимое html извлекается из вызова ajax и добавляется в DOM через jQuery.

  • Javascript, поддерживающий оба модальных файла, включая стандартные теги html <script>.

Я заметил, что точки останова запускаются только на Modal 1. Они не работают, когда код выполняется на динамически добавленном Modal 2, хотя совершенно очевидно, что код действительно оценивается и запускается. Появляются флажки предупреждений, вещи типа codey выполняются и выводятся по логике, изложенной в коде.

Я не погружался глубже, чтобы исследовать дальше, потому что я настаивал на времени, но хотел поместить его туда и вернуть сообщество.

PS: Я использую SO все время, но это мой первый пост, так что легко на меня: -)

Ответ 8

Убедитесь, что вы используете один и тот же хост в URL-адресе, который был у вас при настройке сопоставления. Например. если вы были в http://127.0.0.1/my-app при настройке и отображении рабочей области, то точки останова не будут работать, если вы просмотрите страницу с помощью http://localhost/my-app. Кроме того, спасибо за то, что вы читаете это. См. Мой ответ на проблему Chromium здесь.

Ответ 9

убедитесь, что вы открыли консоль javascript (или источники) в вашем хромированном окне. иначе он никогда не попадет в точку останова. вы можете открыть консоль javascript с помощью кнопки выбора в правом верхнем углу → tools → javascript console.

Ответ 10

У меня была проблема, когда точки останова Chrome ничего не стреляли. Когда я пытался использовать "отладчик" в своем коде, я мог только выполнить код в версии VM моего кода. Моя проблема заключалась в том, что я неправильно отображал ресурсы. Re-mapping исправил мою проблему.

Ответ 11

Моим решением было очистить локальное хранилище, хранилище сеансов и файлы cookie на вкладке "Приложения". После этого Chrome приостановит выполнение скрипта в точках останова, определенных в Sources.

  1. Нажмите на вкладку Приложения Google Chrome.
  2. Щелкните правой кнопкой мыши URL-адрес в каждой папке> Очистить

Снимок экрана: вкладка "Приложения"

Ответ 12

Итак, в дополнение к ответу Адама Ракиса, если у вас есть ошибки в вашем файле javascript выше точки останова, вы не достигнете его, независимо от того, флаг вы его отметили или введите debugger;.

Вот пример:

if (nonExistentVar === "something") {
  console.log("this won't happen as the above errors out");
}
debugger;
console.log("this won't print either")

Ответ 13

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

поместите это где-нибудь в файл javascript, который вы хотите запустить

debugger

откройте консоль браузера и перезагрузите страницу.

отладчик будет работать как пример изображения ниже

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

Ответ 14

Я не уверен, как это работает, но нажатие клавиши F1 для настроек и справа внизу, нажатие кнопки "Восстановить значения по умолчанию и перезагрузить" сработало для меня.

Ответ 15

Довольно поздний ответ, но ничего из вышеперечисленного не помогло моему делу и было чем-то другим

во время ссылки на файл javascript type = "text/javascript" отсутствовал в унаследованном приложении, над которым я работал

<script  src="ab.js" ></script>

ниже одного сработало, и точки останова достигли ожидаемого уровня

 <script  src="ab.js" type="text/javascript"></script>

Ответ 16

У меня была такая же проблема в файле строки 10K. Точки останова игнорировались,
жестко закодированные инструкции _debugger, но они не могут быть переключены и могут быть раздражающими при размещении в цикле. Мое решение, которое немного взломано, но оно работает, заключается в том, чтобы добавить в верхнюю часть файла следующее:

let myDebuggerFlag = false;
let myDebugger = function () {
    if (myDebuggerFlag) {
        debugger;
    }
}

то я добавляю myDebugger(); inline, где я обычно использовал бы точку останова.

чтобы включить отладку, просто введите myDebuggerFlag = true; на консольной линии. (сначала вы должны выйти из myDebugger.