Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在嵌入式V8中调试javascript? 我试图学习如何在V8中使用调试对象来调试JavaScript C++应用程序中的JavaScript。_Javascript_V8_Embedded V8 - Fatal编程技术网

如何在嵌入式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"}}