以编程方式控制Javascript中的断点?

27 浏览
0 Comments

以编程方式控制Javascript中的断点?

在任何浏览器、使用任何插件,有可能以编程方式启用或禁用代码中的断点吗?我已经知道可以设置条件断点,但我真的很想通过代码设置它们。

0
0 Comments

问题:如何在Javascript中以编程方式控制断点?

原因:想要了解如何在Javascript代码中以编程方式设置断点,而不仅仅是通过FireBug函数的调试和取消调试方法。

解决方法:根据FireBug教程,可以使用debug(fn)和undebug(fn)函数在命名函数的第一行设置断点。然而,这些函数似乎只能在FireBug的命令行中执行,而不能直接在Javascript代码中执行。尝试在代码中添加debug(myFunctionName);会导致错误。

根据最近可用的Wayback Machine快照,原始网站已不再活动。可以在2018年的快照中找到最新的内容:web.archive.org/web/20180412190544/http://michaelsync.net/2007/…

0
0 Comments

原因:上述方法使用debugger;关键字来在Firebug中设置断点,但这种方法不够程序化,无法在任意函数的开头动态添加断点。

解决方法:通过使用Firebug提供的Debug API,可以以编程的方式控制断点。

下面是一种实现方式:

// 手动引入Firebug的Debug API
var Firebug = window.Firebug || (function() {
    var fb = {};
    window.console.firebug = true;
    fb.init = function() {};
    fb.global = window;
    return fb;
})();
// 创建一个函数,将在函数开头设置断点
function setBreakpoint() {
    // 判断是否可用Firebug
    if (typeof Firebug.Debugger !== 'undefined') {
        // 获取当前调用栈
        var stack = Firebug.Debugger.getStack();
        // 获取函数的名称
        var functionName = stack[0].name;
        
        // 设置断点
        Firebug.Debugger.setBreakpoint(null, functionName, null, null);
    }
}
// 测试函数
function testFunction() {
    console.log('Hello World');
}
// 在测试函数的开头设置断点
setBreakpoint();
testFunction();

通过上述代码,我们可以在任意函数的开头设置断点。这种方法比使用debugger;关键字更加灵活和可控,可以满足更多编程需求。

0
0 Comments

问题的出现原因:在Javascript中,调试代码通常使用断点来暂停程序的执行。然而,有时候我们希望能够以编程的方式控制断点,而不是手动在代码中添加断点。这样可以更灵活地在特定条件下暂停代码执行,方便调试和排查问题。

解决方法一:我们可以定义一个名为__checkDebug()的函数,在需要调试的函数内部调用该函数。该函数会检查一个全局变量(或者半全局变量),当该变量为真时,调用debugger语句。这样,当我们需要调试时,只需要将该变量设置为真即可。

解决方法二:我们可以通过动态装饰函数的方式,在代码执行过程中动态地为函数添加调试功能。我们可以通过修改Function.prototype来实现这个功能。首先,我们定义一个debug()方法,该方法会返回一个新的函数,该新函数在执行之前会检查debugme变量是否为真,如果是,则调用debugger语句。然后,我们将需要调试的函数通过调用debug()方法进行装饰,这样,在调用被装饰的函数时,会自动进行调试。

解决方法三:另一种方法是构建一个JavaScript构建系统,该系统会在每个函数声明之后插入调用__checkDebug()的代码。这需要一个语法解析器来解析代码,但如果只需要修改函数,那么编写一个简单的令牌解析器就足够了。

通过以上三种解决方法,我们可以以编程的方式控制断点,从而更灵活地进行调试和排查问题。

0