V8 嵌入。无法打印出“v8::Local”对象
V8 Embedding. Cannot print out the `v8::Local` object
简而言之
我试图打印出 v8::Local
对象内容,使用 v8/tools/gdbinit
和 v8/tools/lldb_commands.py
帮助脚本,我得到了 Empty Line
或 Syntax Error
消息。有什么我错过的吗?所以我的问题是 我们如何打印 v8::Local
对象内容?
大部分配置来自官方嵌入教程(https://v8.dev/docs/embed),没有任何一行修改。以下是一些详细信息:
- 源分支:“主要”(2022/01/18)
- GN 构建配置:“x64.release.sample”
- 计划:v8/samples/hello-world.cc
- 平台: "Ubuntu18.04 + GDB10" / "macOS 10.14 + LLDB11"
GDB 输出:(ubuntu18.04)
### Compile & Link
$ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -lv8_monolith -ldl -Lout.gn/x64.release.sample/obj/ -pthread -std=c++14 -DV8_COMPRESS_POINTERS -g
### Debug
$ gdb -x tools/gdbinit ./hello_world
(gdb) p result
= {val_ = 0x55d4f7a35408}
(gdb) jlh result
A syntax error in expression, near `)(result).val_))'.
LLDB 输出:(macos10.14)
### Compile & Link
$ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -lv8_monolith -Lout.gn/x64.release.sample/obj/ -pthread -std=c++14 -DV8_COMPRESS_POINTERS -g
### Debug
$ lldb ./hello_world
(lldb) command script import tools/lldb_commands.py
(lldb) b hello-world.cc:56
(lldb) r
(lldb) p *utf8
(char *) [=11=] = 0x0000000102302590 "Hello, World!"
(lldb) p result
(v8::Local<v8::Value>) = (val_ = 0x0000000102815668)
(lldb) jlh result
(lldb)
对于调试,请尝试使用调试版本:使用 gn args <your_output_dir>
设置 is_debug = true
,然后重新编译。
如果你坚持调试发布模式的二进制文件,你可以启用 jlh
和 v8_enable_object_print = true
GN arg 的朋友,但你的体验可能在其他方面很奇怪(例如步进和断点不可靠,许多值将是 <optimized out>
,等等)。
简而言之
我试图打印出 v8::Local
对象内容,使用 v8/tools/gdbinit
和 v8/tools/lldb_commands.py
帮助脚本,我得到了 Empty Line
或 Syntax Error
消息。有什么我错过的吗?所以我的问题是 我们如何打印 v8::Local
对象内容?
大部分配置来自官方嵌入教程(https://v8.dev/docs/embed),没有任何一行修改。以下是一些详细信息:
- 源分支:“主要”(2022/01/18)
- GN 构建配置:“x64.release.sample”
- 计划:v8/samples/hello-world.cc
- 平台: "Ubuntu18.04 + GDB10" / "macOS 10.14 + LLDB11"
GDB 输出:(ubuntu18.04)
### Compile & Link
$ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -lv8_monolith -ldl -Lout.gn/x64.release.sample/obj/ -pthread -std=c++14 -DV8_COMPRESS_POINTERS -g
### Debug
$ gdb -x tools/gdbinit ./hello_world
(gdb) p result
= {val_ = 0x55d4f7a35408}
(gdb) jlh result
A syntax error in expression, near `)(result).val_))'.
LLDB 输出:(macos10.14)
### Compile & Link
$ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -lv8_monolith -Lout.gn/x64.release.sample/obj/ -pthread -std=c++14 -DV8_COMPRESS_POINTERS -g
### Debug
$ lldb ./hello_world
(lldb) command script import tools/lldb_commands.py
(lldb) b hello-world.cc:56
(lldb) r
(lldb) p *utf8
(char *) [=11=] = 0x0000000102302590 "Hello, World!"
(lldb) p result
(v8::Local<v8::Value>) = (val_ = 0x0000000102815668)
(lldb) jlh result
(lldb)
对于调试,请尝试使用调试版本:使用 gn args <your_output_dir>
设置 is_debug = true
,然后重新编译。
如果你坚持调试发布模式的二进制文件,你可以启用 jlh
和 v8_enable_object_print = true
GN arg 的朋友,但你的体验可能在其他方面很奇怪(例如步进和断点不可靠,许多值将是 <optimized out>
,等等)。