调试动态添加的Javascript代码
与我共事的一位程序员的代码与此类似:调试动态添加的Javascript代码,javascript,firebug,dynamic,Javascript,Firebug,Dynamic,与我共事的一位程序员的代码与此类似: var head = document.getElementsByTagName("head")[0]; var e = document.createElement("script"); e.type = "text/javascript"; var b = "function moo() { alert('hello'); }"; e.appendChild(document.createTextNode(b)); head.appendCh
var head = document.getElementsByTagName("head")[0];
var e = document.createElement("script");
e.type = "text/javascript";
var b = "function moo() { alert('hello'); }";
e.appendChild(document.createTextNode(b));
head.appendChild(e);
moo();
这一切都很好,但我想进入moo(),firebug就是做不到。我知道我可以把整个事情拆开,但我真的不想碰它,他的代码也可以:)
你知道我如何用Firebug调试它吗
干杯你可以放一个
调试器代码>语句在那里。Firebug应该认识到这一点,并让您介入。IMO添加一个try-catch块:
try{
alert(\"hello!\") ;
} catch(e) {
console.log(e) ;
}
以获取任何运行时错误的错误消息。
如果我理解正确,这里的问题是您在后期
将上述代码分支添加到早期
(按照解析时间顺序)。Firebug将已经通过您正在更改的部分,因此将无法识别代码。,使用Safari及其脚本调试器
我延长了你同事的代码,以便有几行代码可以通过
var b = "function moo() { var a=10; a +=1; a+=10; alert(a); }";
请参见图片以获得更清晰的解释。;不行。我可以中断对moo()的调用,但不能插手。只是为了省去其他人的麻烦:Chrome的开发工具也不能神奇地处理它。FWIW:我想说,调试它的困难是支持重构它的一个很好的论据。你实际上是在那里做一个eval
(在一般意义上),而且几乎总是有更好的方法来处理它。代码是这样构造的,有什么特别的原因吗?在我看来,如果您已经将代码注入到DOM中,为什么不直接声明它,使用新函数(“…”
或评估它呢?@Sean:他所做的和评估
之间存在着很大的范围/上下文差异。如果他要重构它,我会极力避免像ness一样的评估。:-)@肖恩·金赛:为了回答这个问题,这很可能是一个简化的例子,就像通常的堆栈溢出一样。另外,我认为eval
或new Function()
仍然存在同样的问题。图中显示,Safari的调试器确实能够进入动态创建的函数。我自己还没有验证它是否有效。OP(原始海报)说代码正在工作,所以应该没有可以看到的错误。是的,OP没有说他为什么要进入代码,所以我认为这要么是自我教育,要么可能是正在进行的代码正确性验证。OP说我有什么想法可以用Firebug调试这个吗?为什么你认为他想调试工作代码?