如何在嵌入式V8中调试javascript? 我试图学习如何在V8中使用调试对象来调试JavaScript C++应用程序中的JavaScript。
我调用了如何在嵌入式V8中调试javascript? 我试图学习如何在V8中使用调试对象来调试JavaScript C++应用程序中的JavaScript。,javascript,v8,embedded-v8,Javascript,V8,Embedded V8,我调用了v8::Debug::SetDebugEventListener并设置了回调。然后我调用v8::Debug::GetDebugContext来获取调试上下文,然后运行类似于:Debug.scripts() < >如果我从C++打印出该调用的结果,我得到: [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {},
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}
谢谢。(注意:这可能是正确的方法,也可能不是正确的方法,但在一些简单的情况下,它对我很有效)
然后打开结果:
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"}}
/*GetEventData()在命中断点时返回:
* {
*中断点命中:[{active\uu:true,实际位置:{column:4,line:13,script\u id:55},条件为空,
*脚本\u断点\u点\u:{
*是的,
*中断点:[],
*列:未定义,
*条件:未定义,
*groupId_u2;:未定义,
*第13行,
*数字:1,当我发布这篇文章时,我不知道的一件事是,有关v8::脚本的一组信息存储在v8::UnboundScript中,可以通过v8::Script::GetUnboundScript()从脚本中获取
,即使您没有先用v8::ScriptCompiler显式地创建一个脚本。您找到答案了吗?@Qwertman我用我所学的内容给出了一个自我回答。在v8中调试javascript似乎非常困难,而且文档记录也非常糟糕(即使是在v8中)。
/* 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"}}