簡體   English   中英

有沒有辦法在不使用Firebug的情況下查看Firefox中執行的JavaScript的痕跡?

[英]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一直是一個很好的庫)。

任何幫助將不勝感激。

謝謝大家的回答。 Venkman最終成為我用來逐步檢查代碼的工具,並讓我了解了問題所在。 或者更確切地說 對於那些感興趣的人,我的問題是由Firefox錯誤引起的: 496087 此錯誤可能也涉及: 501501 在Firefox 3.0.10+的框架之間使用setTimeout和setInterval時似乎有點破損。

文克曼很方便,但有點不穩定。 我偶爾會收到錯誤消息,指出執行堆棧中缺少數據。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM