2016-04-30 6 views
2

Я создал небольшой прототип библиотеки C#, который имеет функцию Invoke.Прикрепить отладчик Visual Studio к электронному окну через node.js

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# в мое приложение. (т. е. код C# и JavaScript работают вместе, как я их ожидаю.)

Поскольку это прототип для более сложной системы, я хотел бы иметь возможность присоединить отладчик Visual Studio к узлу (или электрону ?), загрузите файл отладочных символов для библиотеки C# и позвольте мне пройти через мою C# dll в соответствии с документацией Edge.js (см. the github page here). Я скопировал файл C# dll и .pdb в каталог электронных приложений.

Итак, я установил точку останова в своем классе C# в Visual Studio, а затем отправился присоединять отладчик к процессу «Управляемый» node.exe. Первое, что я заметил, это то, что было выполнено два процесса node.exe, ни одно из которых не содержало описание «Управляемое», упомянутое в документации.

Я попытался установить сначала на один, а другой, но не смог получить, чтобы моя точка останова попала после моего вызова edge.js функции dll C#. Я проверил модули Debug-> Windows-> и увидел, что на самом деле модули не загружаются. Разочарованный, я приложил отладчик к электронному процессу (который имеет описание «Управляемый»), и моя C# dll внезапно появилась с символами, загруженными на страницу Debug-> Windows-> Modules! Увы, мой контрольный пункт все еще не попал.

Кто-нибудь знает, есть ли способ заставить отладчик в Visual Studio фактически подключиться к узловому/электронному приложению и разрешить детальную отладку в связанной DLL C#?

ответ

3

Хорошо, я понял. Происходит также три процесса electronic.exe. Я продолжал открывать средство просмотра Debug-> Windows-> Modules в Visual Studio, затем запускал приложение для работы с электронами/краями/узлами. Используя там инструменты для отладки, я поставил точку останова перед вызовом функции на мою C# dll и запустил ее. Он остановился на контрольной точке. Затем я приложил отладчик к первому процессу electron.exe и установил точку останова в классе C#. Затем я перешел ко мне в библиотеку C#. Я повторил процесс для каждого процесса electronic.exe. Процесс electronic.exe, который имеет описание «Управляемый», работал, и я смог ударить по точке останова в C# dll и выполнить код! Каждый раз, когда вы проходите вызов электронного приложения в код C#, я вижу, что он загружает мои отладочные символы в Visual Studio в средство просмотра модулей.

EDIT При дальнейшем использовании и тестировании процесс «управляемого» электрона не появляется до тех пор, пока функция электронного ребра не будет вызвана в javascript. Поэтому, если вы не видите «управляемый» электронный процесс, убедитесь, что точка останова установлена ​​где-то после этого вызова.