如何调试javascript在嵌入式V8

How to debug javascript in embedded V8?

本文关键字:javascript 嵌入式 V8 调试 何调试      更新时间:2023-09-26

我正在尝试学习如何在V8中使用调试对象来调试嵌入式javascript c++应用程序中的javascript。

我已经呼叫了v8::Debug::SetDebugEventListener并设置了回拨。然后我调用v8::Debug::GetDebugContext以获得调试上下文,然后运行如下命令:Debug.scripts()

如果我从c++输出调用的结果,我得到:

 [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]

我实际上想做的是在脚本中为给定的行号设置一个断点,但甚至不能使最基本的东西工作。

我得到调试事件监听器的回调,但是回调输入参数(非用户提供的)数据对我来说也没有任何意义。

{script_: {context_: {data_: undefined, handle_: 0, type_: "context"}, handle_: 1, script_: {}, type_: "script"}, type_: 4}
{break_id: 2, selected_frame: 0}

谢谢。

(注意:这可能是也可能不是正确的方式来做事情,但它在一些简单的情况下为我工作)

v8::DebugEvent debug_event_type = event_details.GetEvent();

然后打开结果:

if (debug_event_type == v8::DebugEvent::Break) {

这里是一个非常简单的断点被击中的传入数据:

 /* GetEventData() when a breakpoint is hit returns:
     * {
     *      break_points_hit_: [{active_: true, actual_location: {column: 4, line: 13, script_id: 55}, condition_: null,
     *      script_break_point_: {
     *          active_: true,
     *          break_points_: [],
     *          column_: undefined,
     *          condition_: undefined,
     *          groupId_: undefined,
     *          line_: 13,
     *          number_: 1, <== breakpoint number - v8-assigned
     *          position_alignment_: 0,
     *          script_id_: 55, <== script id passed in from v8::ScriptOrigin when compiled
     *          type_: 0
 *          },
 *          source_position_: 175}], frame_: {break_id_: 8, details_: {break_id_: 8, details_: [392424216, {}, function a(){
    println("Beginning of a()");
    let some_var = 5;
    some_var += 5;
    b(some_var);
    println("End of a()");
}, {sourceColumnStart_: [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 4, undefined, undefined, undefined, undefined, undefined, undefined, undefined]}, 0, 1, 175, false, false, 0, "some_var", 5]}, index_: 0, type_: "frame"}}

shameless self promotion:您可以在我的v8集成简化库v8toolkit中看到我在调试v8方面取得的进展:https://github.com/xaxxon/v8toolkit/blob/master/src/debugger.cpp