簡體   English   中英

如何打印 V8 解釋器機器碼?

[英]How can I print V8 interpreter machine code?

假設我有一個函數和一個函數調用,如下所示:

function foo(i, j) {
  return i + j;
}

foo(1, 2);

目前,我可以使用如下標志“--print-bytecode”打印解釋器生成的字節碼。

$v8/out/x64.release/d8 --print-bytecode foo.js

我對在 CPU 級別打印出的機器代碼真正感興趣的東西(我不確定這是否適用於解釋器級別,所以如果不是,請告訴我。)我可以獲得指令指針信息進行某種源級調試和寄存器信息。

另外,我在某處讀到我可以使用 d8(不是 JIT gdb)激活像 gdb 這樣的調試器,我不確定如何激活它。 有沒有人對以上兩個問題有什么建議?

先感謝您。

V8 開發人員在這里。 我不完全確定我是否正確理解您的要求,但我認為答案是“這是不可能的”。 解釋器不是編譯器,因此按照設計,它不會為您的函數生成機器代碼,只會生成字節碼。 字節碼由所謂的“字節碼處理程序”“執行”/解釋,但那些不是特定於函數的:相同的字節碼總是由相同的處理程序處理,它是 V8 二進制文件的一部分。 您可以打印每個處理程序的機器指令,但這對任何“源級調試”都沒有幫助。

也就是說,我不確定您所說的“源代碼級調試”是什么意思。 如果你想調試 JavaScript 程序,我的建議是使用 Chrome DevTools(或其他瀏覽器的等效工具)。 調試 V8 確實是為了發現V8 中的錯誤; 使用低級 V8 洞察來檢查 JavaScript 變量或設置 JavaScript 斷點等在理論上是可能的,但比使用瀏覽器的 DevTools 困難幾個數量級——我從未這樣做過,並且建議不要嘗試,因為它是不是適合這項工作的工具。

使用 d8 激活像 gdb 這樣的調試器

就像您在 GDB 中運行任何其他程序一樣: gdb -args out/x64.debug/d8 foo.js ,但請參見上文:對於 JavaScript 調試,這不會有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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