获取V8以保留调试数据

问题描述 投票:0回答:1

我目前正在尝试调试 V8,以防万一有人有任何见解,我也会解释这个问题,但这与问题无关。

背景

我有一个捆绑的 JavaScript 文件,可以用作解析器,所以类似于:

let data = "3";
let po = new ParseOptions();
let ds = new DiagnosticSink();
let ps = new Parser().parseSourceFile(data, po, ds);

当我调用

.parseSourceFile
时,就会发生致命错误,但它似乎只在我有多个令牌时才会发生,即:上面的内容没问题,但如果
data
3 + 5
a = 3
,那就会了错误。当通过节点运行它时,我只是得到一个类似的 AST(具有更多节点)。

错误是:

#
# Fatal error in ../../src/objects/intl-objects.cc, line 2478
# Debug check failed: U_SUCCESS(status).
#
#
#
#FailureMessage Object: 0x7ffc0cb58460
==== C stack trace ===============================

    ./a.out() [0x182c9e6]
    ./a.out() [0x41966b]
    ./a.out() [0x181c90b]
    ./a.out() [0x181c935]
    ./a.out() [0x8215a0]
    ./a.out() [0x18e4379]
    ./a.out() [0x18eccbd]
    ./a.out() [0x12486ff]
Trace/breakpoint trap (core dumped)

问题

我想使用

gdb
来单步执行 V8 内部的代码,看看我是否可以理解该错误,因为查看 source 并不能帮助我具体理解这个问题。问题是它只显示 ASM 代码,并且我已确保使用
is_debug=true
标志编译 V8。有没有其他方法我应该配音 V8,有没有一种方法可以构建 V8 以便我可以使用
gdb

c++ v8
1个回答
0
投票

(这里是 V8 开发者。)

将 GDB 与 V8 一起使用是绝对可能的,重要的 GN arg 是

v8_optimized_debug = false
(除了
is_debug = true
)。如果您使用便捷的工作流程,您会自动获得它。不需要更多的技巧;不过为了更加方便,您可能还需要包含来自您的 ~/.gdbinit 的 V8 的
gdbinit

这看起来确实像 V8 中的错误,因此请随时在 crbug.com/v8/new 上提交错误并附上重现说明,团队中的某人会查看 - 如果最近版本仍然出现这种情况; 9.7已经很老了。当然,如果您能够进一步进行调试,那也很好,我们非常乐意接受补丁

© www.soinside.com 2019 - 2024. All rights reserved.