Udostępnij za pośrednictwem


Debugowanie aplikacji partnerskich

Ważne

Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).

  1. Upewnij się, że urządzenie jest podłączone do komputera za pomocą portu USB. W menu Ustaw element startowy wybierz pozycję Aplikacja usługi Azure Sphere (wszystkie rdzenie), w której aplikacja usługi Azure Sphere jest nazwą projektu najwyższego poziomu lub naciśnij F5.

    Przycisk Zdalnego debugera GDB

  2. Jeśli zostanie wyświetlony monit o skompilowanie projektu, wybierz pozycję Tak. Program Visual Studio kompiluje aplikacje partnerskie, tworzy pakiety obrazów, ładuje je bezpośrednio na tablicy i uruchamia je w trybie debugowania. Ładowanie bezpośrednie oznacza, że aplikacje są dostarczane bezpośrednio z komputera za pośrednictwem połączenia przewodowego, a nie dostarczane za pośrednictwem chmury.

    Zanotuj ścieżki w widoku>danych wyjściowych>Pokaż dane wyjściowe z: Dane wyjściowe kompilacji, które wskazują lokalizację pakietów obrazów wyjściowych na komputerze. Gdy wszystko będzie gotowe do utworzenia wdrożenia, musisz znać ścieżki do pakietów obrazów.

  3. Domyślnie w oknie Dane wyjściowe są wyświetlane dane wyjściowe z danych wyjściowych urządzenia. Aby wyświetlić komunikaty z debugera, wybierz pozycję Debuguj z menu rozwijanego Pokaż dane wyjściowe z: . Możesz również sprawdzić dezasemblerowanie programu, rejestry lub pamięć za pomocą menu Debugowanie>systemu Windows.

Jeśli masz dwie aplikacje RTApps, upewnij się, że oba są wyświetlane jako aplikacje partnerskie w pliku launch.vs.json najwyższego poziomu.

Użyj debugera programu Visual Studio, aby ustawić punkty przerwania, wstrzymać, przejść przez krok, przejść do, uruchomić ponownie lub zatrzymać aplikację.

Po zatrzymaniu w punkcie przerwania w kodzie źródłowym języka C można otworzyć okno Dezasemblacji, które pokazuje bieżący adres, mnemonic asemblera dla bieżącego polecenia i informacje, takie jak zarejestrowane rejestry lub wykonywane polecenie kodu źródłowego.

Aby otworzyć okno Dezasemblacji :

  1. Upewnij się, że plik źródłowy kodu C zawierający punkt przerwania jest otwarty w programie Visual Studio.
  2. Wybierz pozycję Debugowanie>dezasemblacji systemu Windows>lub naciśnij Alt+8.
  1. Otwórz folder zawierający aplikacje partnerskie. Program Visual Studio Code wykrywa plik obszaru roboczego i, czy chcesz otworzyć obszar roboczy. Wybierz pozycję Otwórz obszar roboczy, aby otworzyć jednocześnie aplikację czasu rzeczywistego i aplikację wysokiego poziomu.

  2. Kliknij prawym przyciskiem myszy jeden z dwóch plików CMakeLists.txt i wybierz polecenie Skompiluj wszystkie projekty.

  3. Kliknij ikonę Uruchom na pasku działań programu Visual Studio Code.

  4. W menu ściągania, które jest wyświetlane w górnej części okna po lewej stronie ekranu, wybierz pozycję Uruchom aplikacje usługi Azure Sphere (gdb)(obszar roboczy).

  5. Naciśnij F5, aby skompilować i debugować projekt. Jeśli projekt nie został wcześniej skompilowany lub jeśli pliki uległy zmianie i ponowne kompilowanie jest wymagane, program Visual Studio Code skompiluje projekt przed rozpoczęciem debugowania.

  6. Poczekaj kilka sekund na skompilowanie aplikacji przez program Visual Studio Code, utworzenie pakietów obrazów, wdrożenie ich na tablicy i uruchomienie ich w trybie debugowania. Aktualizacje stanu zostaną wyświetlone w okienku Dane wyjściowe po drodze.

    Najpierw narzędzie CMake określa, czy aplikacje muszą zostać skompilowane. Jeśli tak, fokus przenosi się do okna danych wyjściowych, w którym są wyświetlane dane wyjściowe z narzędzia CMake/Build.

    Następnie w okienku danych wyjściowych zostaną wyświetlone dane wyjściowe z polecenia azsphere podczas wdrażania pakietu obrazów na urządzeniu. Na koniec konsola debugowania odbiera fokus i wyświetla dane wyjściowe bazy danych gdb.

Użyj debugera programu Visual Studio Code, aby ustawić punkty przerwania, wstrzymać, przejść, przejść do, uruchomić ponownie lub zatrzymać aplikację.

Po zatrzymaniu w punkcie przerwania w kodzie źródłowym języka C można otworzyć widok Dezasemblacja, który pokazuje bieżący adres, nieprzetworzone dane szesnastkowy, mnemonic asemblera dla bieżącego polecenia i informacje, takie jak zarejestrowane rejestry lub wykonywane polecenie kodu źródłowego.

Aby otworzyć widok Dezasemblacji:

  1. Upewnij się, że plik źródłowy kodu C zawierający punkt przerwania jest otwarty w edytorze programu Visual Studio Code.
  2. Kliknij prawym przyciskiem myszy okno edytora i wybierz polecenie Otwórz widok dezasemblowania lub wybierz polecenie Wyświetl>paletę>poleceń Otwórz widok dezasemblowania.
  1. Zatrzymaj aplikację obsługną w czasie rzeczywistym, jeśli jest uruchomiona.

    azsphere device app stop --component-id <component id>
    
  2. Uruchom ponownie aplikację obsługną w czasie rzeczywistym przy użyciu debugowania.

    azsphere device app start --component-id <component id>
    

    To polecenie zwraca rdzeń, na którym działa aplikacja.

      <component id>
      App state   : running
      Core        : Real time 0
    
  3. Przejdź do folderu Openocd folderu sysroot, za pomocą którego utworzono aplikację. Katalogi sysroot są instalowane w folderze instalacyjnym zestawu SDK usługi Azure Sphere. Na przykład w systemie Windows folder jest instalowany domyślnie w folderze C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd i w systemie Linux pod adresem /opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux.

  4. Uruchom polecenie , openocd jak pokazano w poniższym przykładzie. W przykładzie założono, że aplikacja działa na rdzeniu 0. Jeśli aplikacja jest uruchomiona na rdzeniu 1, zastąp ciąg "targets io0" ciągiem "targets io1".

    openocd -f mt3620-rdb-ftdi.cfg -f mt3620-io0.cfg -c "gdb_memory_map disable" -c "gdb_breakpoint_override hard" -c init -c "targets io0" -c halt -c "targets"
    
  5. Otwórz interfejs wiersza polecenia przy użyciu programu PowerShell, wiersza polecenia systemu Windows lub powłoki poleceń systemu Linux.

  6. Przejdź do folderu zawierającego plik .out aplikacji obsługującej czas rzeczywisty i uruchom arm-none-eabi-gdbplik , który jest częścią łańcucha narzędzi osadzonych arm GNU:

    Wiersz polecenia systemu Windows

    "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
    

    Windows PowerShell

    & "C:\Program Files (x86)\GNU Arm Embedded Toolchain\9 2020-q2-update\bin\arm-none-eabi-gdb" IntercoreComms_RTApp_MT3620_BareMetal.out
    
  7. Serwer OpenOCD udostępnia interfejs serwera GDB w systemie :4444. Ustaw element docelowy na potrzeby debugowania.

    target remote :4444

  8. Teraz można uruchamiać polecenia gdb. Dodaj punkt przerwania w funkcji HandleSendTimerDeferred:

    break HandleSendTimerDeferred

  9. Połączony emulator terminalu powinien wyświetlać dane wyjściowe z aplikacji obsługującej czas rzeczywisty.

  10. Otwórz nowy wiersz polecenia usługi Azure Sphere (Windows) lub okno terminalu (Linux).

  11. Przejdź do folderu zawierającego plik .imagepackage aplikacji wysokiego poziomu.

  12. Jeśli aplikacja jest uruchomiona, zatrzymaj ją, a następnie uruchom ją ponownie przy użyciu debugowania:

    azsphere device app stop --component-id <ComponentId>
    
    azsphere device app start --debug-mode --component-id <ComponentId>
    
  13. Otwórz emulator terminalu i ustanów połączenie Telnet lub TCP z adresem 192.168.35.2 na porcie 2342, aby wyświetlić dane wyjściowe aplikacji wysokiego poziomu.

  14. Uruchom bazę danych gdb za pomocą następującego polecenia:

    Wiersz polecenia systemu Windows

    "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
    

    Windows PowerShell

    & "C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\gcc\arm-poky-linux-musleabi-gdb.exe" IntercoreComms_HighLevelApp.out
    

    Uwaga

    Zestaw SDK usługi Azure Sphere jest dostarczany z wieloma katalogami sysroot, dzięki czemu aplikacje mogą kierować do różnych zestawów interfejsów API zgodnie z opisem w temacie Wersja środowiska uruchomieniowego aplikacji, katalogi sysroot i interfejsy API beta. Katalogi sysroot są instalowane w folderze instalacyjnym zestawu SDK usługi Azure Sphere w obszarze Sysroots.

  15. Ustaw docelowy zdalny debugowanie na adres IP 192.168.35.2 na porcie 2345:

    target remote 192.168.35.2:2345
    
  16. Dodaj punkt przerwania w funkcji SendMessageToRTApp:

    break SendMessageToRTApp
    
  17. Wpisz c , aby kontynuować, obserwuj dane wyjściowe w terminalu Telnet/TCP, a następnie przejdź do wiersza polecenia lub okna terminalu zawierającego sesję debugowania aplikacji w czasie rzeczywistym.

  18. Wpisz c , aby kontynuować i obserwować dane wyjściowe w połączonej sesji szeregowej.

Możesz pracować tam i z powrotem między sesjami debugowania, przełączając się między aplikacją obsługą w czasie rzeczywistym a aplikacją wysokiego poziomu. Powinny zostać wyświetlone dane wyjściowe podobne do następujących w dwóch oknach wyjściowych:

Starting debugger....
                     Process /mnt/apps/25025d2c-66da-4448-bae1-ac26fcdd3627/bin/app created; pid = 40
                     Listening on port 2345
                                           Remote debugging from host 192.168.35.1, port 56522
              High-level intercore comms application
                                                    Sends data to, and receives data from a real-time capable application.
                                          Sending: hl-app-to-rt-app-00
                                                                      Sending: hl-app-to-rt-app-01
IntercoreComms_RTApp_MT3620_BareMetal
App built on: Nov 17 2020, 09:25:19
Sender: 25025d2c-66da-4448-bae1-ac26fcdd3627
Message size: 19 bytes:
Hex: 68:6c:2d:61:70:70:2d:74:6f:2d:72:74:2d:61:70:70:2d:30:30
Text: hl-app-to-rt-app-00

Aby zakończyć każdą sesję debugowania, wpisz q w wierszu polecenia bazy danych gdb.