通过 node.js 将 Visual Studio 调试器附加到 electron-edge 应用程序

Attach Visual Studio debugger to an electron-edge app through node.js

我创建了一个小型 C# 库原型,它有一个 Invoke 函数。

public class TestClass
{
    public async Task<object> Invoke(dynamic input)
    {
        Dictionary<Type, IReport> reports = new Dictionary<Type, IReport>
        {
            {typeof (LevelOne), new LevelOneReport()},
            {typeof (LevelTwo), new LevelTwoReport()}
        };

        ILevel toTestLevel1 = new LevelOne(1);
        ILevel toTestLevel2 = new LevelTwo(2);

        IReport report = reports[toTestLevel2.GetType()];
        return report.Generate(toTestLevel2);
    }
}

该函数的结果是一个新对象,其中包含 int。我已经在我的 node/electron/edge.js 应用程序中确认数据已成功从 C# dll 传递到我的应用程序。 (即 C# 代码和 JavaScript 正在按照我的预期一起工作。)

因为这是一个更复杂系统的原型,我希望能够将 Visual Studio 调试器附加到节点(或电子?)进程,让它加载调试符号文件C# dll 并允许我根据 Edge.js 文档(参见 the github page here)单步执行我的 C# dll。我已经将 C# dll 和 .pdb 文件复制到 electron 应用程序目录。

所以,我在 Visual Studio 中的 C# class 中设置了一个断点,然后将调试器附加到 "Managed" node.exe 进程。我注意到的第一件事是有两个 node.exe 进程 运行,它们都没有文档中提到的 "Managed" 描述。

我尝试先附加到一个,然后再附加到另一个,但在我 edge.js 调用 C# dll 函数后无法命中我的断点。我检查了 Debug->Windows->Modules,发现实际上没有加载任何模块。沮丧的是,我将调试器附加到电子进程(它有 "Managed" 描述),我的 C# dll 突然出现在 Debug->Windows->Modules 页面中加载了符号!唉,我的断点还是没命中

有谁知道是否有办法让 Visual Studio 中的调试器实际附加到 node/electron 应用程序并允许在关联的 C# dll 中进行详细调试?

好的,我明白了。还有三个 electron.exe 个进程也 运行。我在 Visual Studio 中保持 Debug->Windows->Modules 查看器打开,然后在 运行 我的 electron/edge/node 应用程序中保持打开状态。使用那里的调试工具,我在函数调用我的 C# dll 和 运行 之前放置了一个断点。它停在断点处。然后我将调试器附加到第一个 electron.exe 进程并在 C# class 中设置我的断点。然后,我跨过了对 C# 库的调用。我为每个 electron.exe 进程重复了该过程。具有 "Managed" 描述的 electron.exe 进程有效,我能够在 C# dll 中设置断点并单步执行代码!每次你通过电子应用程序调用 C# 代码时,我都可以看到它在模块查看器的 Visual Studio 中加载了我的调试符号。

EDIT 通过进一步的使用和测试,直到javascript中调用了electron-edge require函数后才出现"Managed" electron过程。因此,如果您没有看到 "Managed" 电子进程,请确保您的断点设置在此调用后的某处。