【问题标题】:Javascript watch expression based breakpoints with Firebug?使用 Firebug 的 Javascript 监视基于表达式的断点?
【发布时间】:2011-12-25 17:01:20
【问题描述】:

目前正在处理一些事件路由,并且有很多调试步骤。

我知道在 javascript 中使用“调试器”并将其放在条件之后,这很有用。 我也知道右键单击断点以添加更好的测试表达式。 但是……我不知道这东西会带我去哪里,而且我的功能键开始磨损了。有什么方法可以给 watch 表达式添加断点?

基本上这个想法是,在封闭范围内,我想检查一个名为“this.id”的变量。如果this.id是我想要的值,我进入调试器。

有什么想法吗?

谢谢

想补充一下,Didier 在下面的回答解决了我的问题,正如他们在装饰“功能”的文章中概述的那样。这很可能是在所有函数中搜索我想要的值的阻力最小的路径。

Function.prototype.debug = function(){   
   var fn = this; 
   return function(){     
       if (debugme) debugger; 
       return fn.apply(this, arguments);     
   }; 
};

【问题讨论】:

标签: javascript debugging firebug


【解决方案1】:

要以编程方式中断 javascript 代码,您可以使用以下语句:

debugger;

这适用于 Firebug、Chrome 的控制台和 IE。

因此,根据您的问题,您可以执行以下操作:

if (this.id === "myId")
    debugger;

以下article 非常有用。

【讨论】:

  • 感谢 Didier,我在顶部发表了关于装饰 Function 对象的评论。很有用,谢谢!
  • 最后对我也有用:-)
【解决方案2】:

如果您指的是“条件断点”,即只有在语句为真时才暂停执行的断点,您可以通过右键单击一行脚本来执行此操作,并选择“Edit Breakpoint Condition...”,然后添加要触发断点的语句,例如this.id === "foo";

【讨论】:

  • 条件断点是一个很棒的工具,而且它们提供了帮助。不幸的是,我的问题是我正在尝试映射哪些组件正在通过哪些功能进行路由。我希望有一种方法可以监视调用堆栈,以查看 this.id == "someValue" 是否在代码中的任何位置。可能不可能,但希望如此。
【解决方案3】:

我不是 100% 清楚您需要的内容与条件断点有何不同。例如添加

 var watchVar = this.id

然后设置断点的条件

watchVar == someInt 

应该有效,不是吗?

如果没有,您可以通过在闭包中的某处放置一个普通断点来中断属性更改。当您点击它时,在监视窗格中查找 this.id,右键单击它并选择“属性更改中断”。目前,这差不多是你能做到的,但它不允许你指定一些 id 值而不是其他值。

【讨论】:

  • 我想做的是在 this.id="someValue";我接手了一个项目,问题是我不确定哪些功能正在做什么。有很多事件路由等,并且可能有些低效,因为“步入”可能需要 200 多个步骤才能完成整个周期。我希望让调试器识别它何时在代码中的任何位置使用特定模块。你是这么说的吗?我尝试添加 this.id="someValue"; 的监视表达式;并且调试器没有被触发,但是如果应该可以的话,我可能会遗漏一些东西。
  • 是的,这听起来就像条件断点应该做的那样。使用“this”关键字可能会遇到一些困难,因为它可以做一些奇怪的事情。或者,您可能正在使用闭包/嵌套闭包(例如 jQuery),由于范围问题,这可能会破坏 FireBug 调试代码的能力。另外值得考虑的是您的代码是否被其他代码覆盖。尝试在代码的其他部分或使用其他变量创建更基本的条件断点,看看您是否可以确定哪些条件无法触发断点。
  • 非常有用的信息,谢谢马特。我想我会先看看是否可以在任何地方装饰函数对象,甚至可以尝试重新定义“调用”和“应用”。我之前看到过关于这样做的线程,即使它不起作用(不知道是否会),这是一个非常有趣的想法。
猜你喜欢
  • 2016-12-16
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 2015-02-04
  • 1970-01-01
相关资源
最近更新 更多