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

Javascript 通过node.js将Visual Studio调试器附加到electron edge应用程序,javascript,c#,node.js,visual-studio-debugging,edge.js,Javascript,C#,Node.js,Visual Studio Debugging,Edge.js,我创建了一个小型C#library原型,它有一个Invoke函数 public class TestClass { public async Task<object> Invoke(dynamic input) { Dictionary<Type, IReport> reports = new Dictionary<Type, IReport> { {typeof (LevelOne),

我创建了一个小型C#library原型,它有一个
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);
    }
}
公共类TestClass
{
公共异步任务调用(动态输入)
{
字典报告=新字典
{
{typeof(LevelOne),new LevelOneReport()},
{typeof(LevelTwo),new leveltworept()}
};
ILevel toTestLevel1=新的一级(1);
ILevel toTestLevel2=新的二级(2);
IReport report=报告[TotestLevel 2.GetType()];
返回报告。生成(ToTestLevel 2);
}
}
函数的结果是一个新对象,其中包含
int
。我已经在我的node/electron/edge.js应用程序中确认数据正在成功地从C#dll传递到我的应用程序。(也就是说,C#代码和JavaScript按照我的预期协同工作。)

由于这是一个更复杂系统的原型,我希望能够将Visual Studio调试器附加到节点(或electron?)进程,让它加载C#dll的调试符号文件,并允许我根据Edge.js文档逐步完成C#dll(请参阅)。我已将C#dll和.pdb文件复制到electron应用程序目录

因此,我在Visual Studio的C#类中设置了一个断点,然后将调试器附加到“托管”node.exe进程。我注意到的第一件事是有两个node.exe进程正在运行,它们都没有文档中提到的“托管”描述

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


有人知道有没有办法让VisualStudio中的调试器实际连接到node/electron应用程序,并允许在相关的C#dll中进行详细调试?

好的,我找到了。还有三个electron.exe进程正在运行。我在VisualStudio中保持调试->窗口->模块查看器打开,然后运行我的electron/edge/node应用程序。使用那里的调试工具,我在调用C#dll函数之前插入了一个断点,然后运行它。它在断点处停止。然后,我将调试器附加到第一个electron.exe进程,并在C#类中设置断点。然后我把电话转到了C#library。我对每个electron.exe进程重复了这个过程。具有“托管”描述的electron.exe进程工作正常,我能够在C#dll中点击断点并逐步完成代码!每次你从electron应用程序调用C代码时,我都能看到它在模块查看器的Visual Studio中加载调试符号

编辑通过进一步的使用和测试,在javascript中调用electron edge require函数之前,“托管”electron进程不会出现。因此,如果您没有看到“托管”electron进程,请确保在此调用之后的某个位置设置了断点