2016-10-01 53 views
3

我试图学习如何使用V8中的Debug对象来调试嵌入式javascript C++应用程序中的javascript。如何在嵌入式V8中调试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} 

谢谢。

+0

有一件事我不知道什么时候发布了这个消息,其中存储了一堆有关v8 :: Script的信息在v8 :: UnboundScript中,即使你没有明确地使用v8 :: ScriptCompiler首先创建一个脚本,也可以从具有'v8 :: Script :: GetUnboundScript()'的脚本获得它。 – xaxxon

+0

你有没有找到答案? –

+0

@Qwertman我用我学到的东西给自己一个答案。在v8中调试javascript似乎非常困难,而且极其糟糕(甚至对于v8)。 – xaxxon

回答

1

(注:这可能会或可能不会做的事情以正确的方式,但它的工作对我来说在一些简单的情况下)

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