[英]Is there a way to see a trace of the executed JavaScript in Firefox without using Firebug?
更新:感謝到目前為止的答復。 需要澄清的是,我並不是真正在尋找記錄器,而是在尋找調試器/跟蹤器- 我想要轉儲每一個執行的JavaScript及其執行的時間 。 我今天早些時候嘗試了Venkman,但它不是很穩定。 我的理論是,Dojo代碼甚至Firefox代碼的某些內部都出了問題。
僅在禁用 (或未安裝) Firebug的情況下,這才在Firefox 3.5-3.6中發生。
基本上,我正在使用dojo.io.bind(現已棄用!)在Dojo 0.4.3(我知道!)中發送AJAX請求。 如果您很熟悉,它將使用dojo.io.XMLHTTPTransport作為傳輸。 現在,基本上它的工作方式是發送XHR,然后有一個名為startWatchingInFlight
的觀察程序函數,該函數每10毫秒被調用一次,以檢查XHR的readyState屬性。 當該屬性為4時,它會執行很多操作:
dojo.io.XMLHTTPTransport = new function () { /* I know, I know. I would never do this */
// somewhere in XMLHTTPTransport ...
this.startWatchingInFlight = function () {
// alert('watching...');
if (!this.inFlightTimer) {
this.inFlightTimer = setTimeout("dojo.io.XMLHTTPTransport.watchInFlight();",10);
}
};
this.watchInFlight = function () {
// alert('a glance');
// do a bunch of stuff...
var tif = foo(); // well, never mind how we get it but it's the object in flight
// tif.http is the XHR object
if (4 == tif.http.readyState) {
// call some stuff
}
}
this.bind = function (args) {
// somewhere in XMLHTTPTransport.bind ....
this.startWatchingInFlight();
http.send(query); // Again, http is the already-opened XHR object
// and so on
}
}
現在,這是有趣的部分! 如果我要在上面取消注釋這兩個警報,則在執行此代碼時,我只會收到一個警報:“正在監視...”。 在第一次調用watchInFlight
之前的10毫秒內發生了某些事情,這阻止了它的調用。 ( 編輯:我也使用日志記錄語句而不是警報來達到同樣的效果。)
因此,我需要的是一種跟蹤JavaScript線程的方法,以查看阻止了對watchInFlight
的首次調用的watchInFlight
。 但是,如果您有解決上述問題的方法,我也會考慮的。
限制:我不能使用其他庫,除非您可以使它與Dojo 0.4.3配合使用 (我想我只是吐了一點口……我在開玩笑。Dojo一直是一個很好的庫)。
任何幫助將不勝感激。
簽出Javascript stacktrace庫,以對所有瀏覽器執行此操作:)
我不確定您發布的代碼是否是您問題的精確復制,但是無論如何您都有錯字!
dojo.io.XMLHttpTransport
在你的第一行是不一樣的dojo.io.XMLHTTPTransport
在6行注意,HTTP是不同的字母大小寫不是HTTP。
因此,瀏覽器在執行超時以確定要運行的功能時會失敗。 這說明了為什么您沒有看到任何錯誤消息...但是,我希望啟用Firebug時它也會失敗。 我唯一能想到的是,firebug某種程度上影響了本機firefox js代碼執行eval
。
這只是一個快速響應,但是根據情況,警報可能會使情況惡化。 警報阻止代碼執行。 我建議您不要發出警報,如果無法使用某種形式的調試器,請在頁面上運行該調試器,並為自己提供一個純HTML控制台供輸出。
<div id="console"></div>
代替警報,運行一個簡單的函數,如:
function log(msg) {
document.getElementById("console").innerHTML += msg;
}
並且由於代碼非常小,因此只需編寫自己的偽堆棧跟蹤即可:
log("entering watchInFlight.");
IMO,警報非常適合即時反饋,除非涉及異步網絡請求。 在這種情況下,必須使用瀏覽器調試器或本地記錄器。
iirc,警報就像是讓步,使其他事件在存在對話框時能夠觸發,因此它將更改您嘗試調試的代碼的時間
我們使用黑鳥 ,效果很好。
Aptana IDE具有與Firefox配合使用的瀏覽器調試器機制。 因此,如果您可以正確設置它和您的源代碼,則可以從eclipse中進行調試。 請注意,它會在Firefox中安裝一個插件。
Firefox 3.5和3.6啟用了Javascript JIT。 在頁面上使用Firebug時,JSD會禁用JIT,因此您可以有效地進行調試。 因此,第一步將是更改about:config javascript.options.jit.content上的JIT設置。 如果您安裝了Firebug,也可以嘗試將Script標簽從Enabled更改為Disabled。 我建議您先消除這種可能性,然后再繼續。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.