V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nashaofu
V2EX  ›  C++

electron 内核 windows debug 求助

  •  
  •   nashaofu ·
    nashaofu · 283 天前 · 1253 次点击
    这是一个创建于 283 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当前已经在 windows 上把 electron 源码弄下来了,并且也能够编译出 electron.exe 了。现在想要在 vscode 或者 visual studio 里面断点调试,这一步被卡住了。在 powershell 中运行如下命令可以编译成功:

    mkdir electron
    cd electron
    
    # 拉取代码
    gclient config --name "src/electron" --unmanaged https://github.com/electron/[email protected]
    gclient sync --with_branch_heads --with_tags
    
    cd src
    $env:CHROMIUM_BUILDTOOLS_PATH = "$(Get-Location)\buildtools"
    
    gn gen out/Testing --args="import(\`"//electron/build/args/testing.gn\`")"
    ninja -C out/Testing electron
    

    编译出来的二进制文件好像没办法直接调试,好像是 electron 执行后,会创建多个子进程,并且当前进程会结束掉,导致无法调试,vscode 调试配置 launch.json 如下:

    {
      // 使用 IntelliSense 了解相关属性。
      // 悬停以查看现有属性的描述。
      // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
      "version": "0.2.0",
      "configurations": [
        {
          "name": "(Windows) Launch",
          "type": "cppvsdbg",
          "request": "launch",
          "program": "${workspaceFolder}\\src\\out\\Testing\\electron.exe",
          "args": ["demo"],
          "stopAtEntry": false,
          "cwd": "${workspaceFolder}",
          "environment": [
            { "name": "ELECTRON_ENABLE_LOGGING", "value": "true" },
            { "name": "ELECTRON_ENABLE_STACK_DUMPING", "value": "true" },
            { "name": "ELECTRON_RUN_AS_NODE", "value": "" }
          ],
          "externalConsole": false,
          "sourceFileMap": {
            "o:\\": "${workspaceFolder}"
          }
        }
      ]
    }
    

    所以就想着把项目编译为 vs2022 的工程,但是在执行 gn gen 的时候就会报错,gn gen 命令如下:

    gn gen out/Testing --args="import(\`"//electron/build/args/testing.gn\`")" --ide=vs2022
    

    报错内容说不能找到文件:src/out/Testing/win_clang_x64_for_rust_host_build_tools/obj/build/rust/tests/test_rlib_crate/test_rlib_crate_associated_bin_test_rlib_crate_associated_bin_vunknown_build_script_win_clang_x64_for_rust_host_build_tools.vcxproj.filters

    述求(能实现任意一个都可以):

    1. 希望能在 vscode 中断点调试 electron 源码
    2. 希望能在 vs2022 中编译 electron
    3. 如果可以,希望指导添加一个编译结果,在工程中添加一个新的文件,文件里面有 main 函数,把这个文件编译为二进制文件直接执行,从而方便调试自己想要的模块,而不需要启动整个 electron 项目
    5 条回复    2024-03-14 16:32:16 +08:00
    nashaofu
        1
    nashaofu  
    OP
       283 天前
    launch.json 修改一下 sourceFileMap 后,可以断点调试了,但是在调试面板中不能显示变量,鼠标悬浮到变量上也不能显示变量值,在调试控制台中,也不能输出值。
    ```
    "sourceFileMap": {
    "o:\\": "${workspaceFolder}/src"
    }
    ```
    https://imgur.com/a/KBirtw4
    ysc3839
        2
    ysc3839  
       283 天前 via Android
    运行后直接 VS 附加进程,有调试符号就能对应源代码调试。
    gn 生成 IDE 项目的功能不是给你编译的,只是为了用 IDE 的自动补全、查找定义等功能,编译只能用 ninja 。
    nashaofu
        3
    nashaofu  
    OP
       282 天前
    @ysc3839 调试符号怎么弄呢?目前断点能成功了,但是不能在控制台看到变量值,变量面板也没有任何变量
    ysc3839
        4
    ysc3839  
       282 天前 via Android   ❤️ 1
    @nashaofu 编译时开启调试符号
    nashaofu
        5
    nashaofu  
    OP
       282 天前
    @ysc3839 感谢,已经搞定,修改 src\electron\build\args\testing.gn 中 symbol_level=2 即可
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1540 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:58 · PVG 00:58 · LAX 08:58 · JFK 11:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.