Electron 调试node_internal代码*

# ** Electron 调试node_internal代码

问题

通常意义上,我们想要调试Electron的JS代码确实不太容易,以electron-quick-start为例,在VSCode中按下F10断下代码的位置,顶多就是Electron的init.js;node初始化过程在我们按下开始调试的按钮时,就已经跳过了。那我们想要调试node初始化流程,那要咋整?

前置条件

  • 需要修改electron_node的代码,因此需要重新编译electron;

流程

  1. src\third_party\electron_node\src\node_options.h中修改DebugOptions结构体的值,如下:
      // --inspect
      bool inspector_enabled = true; // 生产环境中可以关闭这个选项。
      // --debug
      bool deprecated_debug = false;
      // --inspect-brk
      bool break_first_line = true;
      // --inspect-brk-node
      bool break_node_first_line = true;
    
    貌似可以传参数--inspect-brk-node来开启,但实际上在6.1.12中,传递该参数无效。更新的版本不知道该问题是否已经修复。
    修改完成后,编译,替换;
  2. VSCode的调试配置中,新增附加调试选项:
    {
          "address": "127.0.0.1",
          "localRoot": "${workspaceFolder}",
          "name": "Attach to Main Process",
          "port": 9229,
          "remoteRoot": "Absolute path to the remote directory containing the program",
          "request": "attach",
          "skipFiles": [],
          "type": "pwa-node"
    },
    
    注意:skipFiles字段中不能忽略node_internal相关的东西;不然相关断点即便命中了也会被立马恢复。
  3. 调试
    1. 首先启动重新编译好的electron主程序;因为第一步中相关设置已经修改生效,electron会等待调试器链接;
    2. VSCode中启动第二步中的附加调试配置,如果一切就绪;那么VSCode中此时会断在初始化代码处。**

你可能感兴趣的:(Electron源码学习,Electron,electron,vscode,javascript)