2017-08-02 54 views
0

重要提示:請不要在Google Chrome的DevTools調試器中給出與設置Javascript斷點相關的答案。我正試圖在Chromium開源瀏覽器的C++源代碼中使用斷點,而不是在DevTools調試器中。無法在XmlHttpRequest模塊上運行斷點(Javascript引擎/ XHR請求)

我試圖讓斷點以下模塊中的工作,所以我可以通過JavaScript代碼由鉻託管的網頁運行不陷阱XHR請求提出:

C:\用戶\ realsensible \文檔\鉻\ src \ third_party \ WebKit \ Source \ core \ xmlhttprequest

我在該模塊中幾乎所有顯着的方法上都設置了斷點,但它們從未被擊中。 PhistucK指出,Chrome啓動了多個進程,並且很可能執行JavaScript引擎的進程與VS啓動的主進程不同,從而破壞了斷點。

要嘗試和測試這個,我在VS之外啓動了Chrome.exe。然後,我嘗試附加到VS附加到進程列表框中看到的每個「鉻」進程(我通過在任務管理器中列出「鉻」進程來雙重檢查此進程列表)。有5個進程名爲「chrome」; 「主」鉻進程和它啓動的四個子進程。對於每個進程I:

1)附加到來自VS的一個chrome進程,我的斷點在幾乎所有重要的XmlHttpRequest方法上都處於活動狀態。 2)(重新)加載了一個網頁,我知道從Javascript中提出了許多XHR請求。 3)從過程分離

在所有5個試驗沒有的斷點曾被擊中。

注意,我在項目中的其他模塊上設置了與JavaScript引擎無關的斷點,並且他們做了的工作。顯然這只是與Javascript相關的代碼,我無法獲得觸發的斷點。

有誰知道如何獲得斷點在Chromium中的JavaScript引擎工作?

+0

你是什麼意思的「斷點」?當鉻的一個實例運行時,你是否編輯鉻源文件? _「要嘗試和測試這個,我啓動了Chrome.exe」_是否與鉻或鉻相關的問題?如果您啓動「Chrome.exe」,爲什麼問題標籤爲「鉻」?你想達到什麼目的? – guest271314

+0

注意Chrome和Chromium是兩種不同的瀏覽器[Google Chrome瀏覽器和Chromium瀏覽器有什麼區別?](https://fossbytes.com/difference-google-chrome-vs-chromium-browser/) – guest271314

+0

@ guest271314 - 我是使用在此位置發現的Chromium開源瀏覽器的源代碼: https://www.chromium。org/developers/how-tos/get-the-code 我在源代碼中設置了斷點,但我沒有更改源代碼。 Chromium單片解決方案中瀏覽器項目的默認可執行文件名是chrome.exe。 –

回答

3

有關在Windows上調試Chromium並專門在渲染器進程中設置斷點的官方說明,請訪問:https://www.chromium.org/developers/how-tos/debugging-on-windows#TOC-Multi-process-issues。 您嘗試了哪些步驟?

此外,只是澄清:JavaScript引擎是V8,它在<chromium>\src\v8。它不知道任何有關XMLHttpRequest,因爲這不是ECMAScript功能。 <chromium>\src\third_party\WebKit\中的代碼是Blink,即HTML渲染引擎。它包含XHR的實現(以及許多其他事物),並通過稱爲「綁定」的層將其提供給JavaScript代碼。 (爲了在渲染器進程中設置斷點,這個區別是不相關的,因爲程序總是相同的。)

+0

謝謝!該文件給了我我需要的斷點工作。順便說一句,經常Chromium與一個空的模式對話框崩潰(框中唯一的內容是一個字形/圖標,沒有文字信息),並在瀏覽器中,我得到臭名昭着的「Aww,出事了」頁面與重新加載按鈕。曾見過。 –

+0

我已經看到並調試了很多渲染器崩潰,但沒有看到任何空的模式對話框。 – jmrk

+0

@jrmk謝謝。如果您碰巧知道哪些代碼模塊會拋出這些框,請告訴我(假設它位於代碼中央)。無論如何,我感謝你的幫助。 –