Przejdź do głównej zawartości

Debugowanie

Podczas uruchamiania aplikacja Syrve POS skanuje wtyczki i uruchamia proces-kontener Resto.Front.Api.Host.exe dla każdej z nich, w kontekście którego wtyczka będzie działać. Dla wygody debugowania możliwe jest uruchomienie tego procesu bezpośrednio z interfejsu deweloperskiego, aby to zrobić w parametrach debugowania projektu wtyczki należy ustawić proces-hosta Resto.Front.Api.Host.exe jako program zewnętrzny i przekazać następujące argumenty wiersza poleceń:

  • -a, --assembly=plik — pełna ścieżka do pliku wtyczki
  • -c, --class=nazwa — pełna nazwa klasy wtyczki (łącznie z przestrzenią nazw)
  • -l, --log=log — pełna ścieżka do pliku logu
  • -m, --module=id — moduł licencyjny określony w atrybucie PluginLicenseModuleId (Licencjonowanie),
  • -n, --nowindow — nie wyświetlaj okna konsoli

Następnie wystarczy uruchomić aplikację Syrve POS raz (bez instalowania wtyczki do folderu Plugins) i będzie można wielokrotnie uruchamiać i zatrzymywać wtyczkę bezpośrednio ze środowiska deweloperskiego (F5 / Shift+F5 w Visual Studio, Alt-F5 w Riderze) bez ponownego uruchamiania Syrve POS. Debugger połączy się automatycznie, dzięki czemu punkty przerwania będą działać, a debugowanie zostanie przerwane w przypadku wystąpienia wyjątków (w Visual Studio/Rider można ustawić, dla jakich typów wyjątków debugowanie ma być przerywane, a dla jakich nie). Zapis w logu (PluginContext.Log) będzie duplikowany w oknie konsoli, jeśli nie jest ono ukryte przez klucz --nowindow, oraz w oknie Output (Ctrl+Alt+O), jeśli debugger jest podłączony.

Do debugowania wtyczki w ten sposób potrzebna jest licencja dewelopera wtyczek.

Visual Studio

Klasyczny .csproj

Przykład wypełnienia pól na karcie Debug dla projektu w starym formacie:

  • Start Action: Uruchom program zewnętrzny: C:\Program Files\...\Resto.Front.Api.Host.exe.
  • Start Options: Argumenty wiersza poleceń: /a="C:\Projects\Front.Api Sdk\Resto.Front.Api.SamplePlugin\bin\Debug\Resto.Front.Api.SamplePlugin.dll" /c=Resto.Front.Api.SamplePlugin.SamplePlugin /m=21005108 /l="C:\Projects\Front.Api Sdk\Logs\sample-plugin.log"

SDK-style .csproj

Dla nowego formatu projektu parametry debugowania zostały przeniesione do osobnego pliku launchsettings.json, który można utworzyć/edytować ręcznie lub za pomocą interfejsu: w właściwościach projektu Debug → Ogólne → Otwórz interfejs profili uruchamiania debugowania → Utwórz nowy profil → Wykonywalny. Przykład zawartości launchsettings.json:

{
"profiles": {
"Resto.Front.Api.SamplePlugin": {
"commandName": "Executable",
"executablePath": "C:\\Program Files\\...\\Front.Net\\Resto.Front.Api.Host.exe",
"commandLineArgs": "/a=\"C:\\Projects\\Front.Api Sdk\\Resto.Front.Api.SamplePlugin\\bin\\Debug\\Resto.Front.Api.SamplePlugin.dll\" /c=Resto.Front.Api.SamplePlugin.SamplePlugin /m=21005108 /l=\"C:\\Projects\\Front.Api Sdk\\Logs\\sample-plugin.log\""
}
}
}

Uwaga dla .NET Standard

Obecnie w Visual Studio istnieje błąd, który uniemożliwia debugowanie wtyczki pod .NET Standard przez uruchamianie jej za pomocą procesu-kontenera Resto.Front.Api.Host.exe, który działa pod .NET Framework.

Opcje rozwiązania:

  • Kompilacja wtyczki pod .NET Framework
  • Użycie Ridera lub innej platformy deweloperskiej, która nie ma tego błędu.
  • Dodanie fikcyjnego projektu pod .NET Framework, ustawienie go jako projektu startowego i określenie tych samych parametrów debugowania co dla wtyczki. Więcej informacji tutaj.

Rider

JetBrains Rider może ustawić własne konfiguracje debugowania z polami Exe path i argumentami programu, a także używać formatu launchsettings.json kompatybilnego z Visual Studio.

Alternatywy

Jeśli nie ma licencji dewelopera wtyczek, konieczne będzie zainstalowanie wtyczki w folderze Plugins, aby aplikacja Syrve POS uruchomiła ją standardowo, ale za każdym razem po edycji wtyczki aplikacja musi zostać zatrzymana i ponownie uruchomiona. Aby zminimalizować niedogodności w takim przypadku, pomocne są następujące sposoby:

  • W ustawieniach projektu Visual Studio na karcie Build w sekcji Output ustawić jako Output path ścieżkę do podfolderu wtyczki w folderze Plugins. W efekcie wtyczka będzie publikowana do tego folderu po każdym kompilowaniu i nie będzie potrzeby kopiowania jej ręcznie.
  • Na początku konstruktora klasy wtyczki dodać wywołanie Debugger.Launch(), aby uzyskać propozycję podłączenia debuggera. Oczywiście można też podłączyć go samodzielnie, wybierając Debug → Attach to Process, ale wymagałoby to więcej kliknięć, a ponadto trzeba by wybrać spośród kilku procesów-kontenerów o tej samej nazwie.