Backbone - 从触发器调用的Chrome调试功能

时间:2016-08-02 11:37:20

标签: javascript debugging backbone.js google-chrome-devtools

Backbone允许您在其他类中触发函数 - 如果正确使用Backbone.Events。

const getNextAlphaString = function (str) {
    "use strict";
    str=str.toUpperCase();
    let chars;
    chars = str.split("");
    const strLen = str.length;
    let continueIncermenting = true;
    for (let i = strLen - 1; i >= 0; i = i - 1) {
        let asciiVal;
        asciiVal = chars[i].charCodeAt(0);
        if (isNaN(asciiVal)) {
            return str;
        }


        if (continueIncermenting === true) {
            if (asciiVal >= 48 && asciiVal < 57) {
                chars[i] = String.fromCharCode(asciiVal + 1);
                continueIncermenting = false;
                break;
            } else if (asciiVal == 57) {
                chars[i] = '0';
                continueIncermenting = true;
            }
            if (asciiVal >= 65 && asciiVal < 90) {
                chars[i] = String.fromCharCode(asciiVal + 1);
                continueIncermenting = false;
                break;
            } else if (asciiVal == 90) {
                chars[i] = String.fromCharCode(65);

                continueIncermenting = true;
            }
        } else {
            if (asciiVal == 90) {
                continueIncermenting = true;
                chars[i] = String.fromCharCode(65);
            }
            if (asciiVal == 57) {
                continueIncermenting = true;
                chars[i] = '0';
            }
        }
    }
    if (continueIncermenting === true) {
        let firstAcii = chars[0].charCodeAt(0);
        if (isNaN(firstAcii)) {
            return str;
        }
        if ((firstAcii >= 65 && firstAcii <= 90) || (firstAcii >= 97 && firstAcii <= 122)) {
            return 'A' + chars.join('').toUpperCase();
        }
        if (firstAcii >= 48 && firstAcii <= 57) {
            return '0' + chars.join('').toUpperCase();
        }
    }
    return chars.join('').toUpperCase();

};

你知道某种方式达到这个功能吗?有些人:触发&#34;调试doSomething()之后? (无需在代码中找到它并在其上设置断点)。

2 个答案:

答案 0 :(得分:1)

您可以使用Debugging JavaScript by Redefining Functions的概念。这实质上意味着覆盖原始函数,注入debugger语句,然后调用原始函数继续正常执行。

实施例

我使用了一个命名函数而不是一个匿名函数,以便稍后可以引用它。

MyApp.event.on("some:trigger", myFunc);

现在我可以存储原始函数的副本,以便在调试后调用。

var oldFunc = myFunc;

myFunc = function() {
    debugger; // or use console.log()
    return oldFunc.apply(this, arguments);
}

这可以在控制台或代码段中调用,以便下次播放代码时,它会中断(或者在console.log语句的情况下记录输出。)

优势

这样做的好处是,触发处理程序执行代码的位数无关紧要,或者它总是会破坏多少次。您不必使用调试器控件单步执行所有以前的代码。对于单个案例,单步进行就足够了。

答案 1 :(得分:1)

您可以blackbox Backbone代码。然后,当您进入MyApp.vent.trigger("some:trigger") Chrome时,Chrome会跳过所有Backbone代码并直接转到您的处理程序代码。

上面链接的文档过于复杂了一些事情。您所要做的就是右键单击源查看器中的Backbone文件,然后选择“Blackbox Script”。然后进入trigger电话。

blackboxing backbone