다음을 통해 공유


파트너 애플리케이션 디버그

  1. 장치가 USB로 PC에 연결되어 있는지 확인합니다. 시작 항목 설정 메뉴에서 Azure Sphere 앱(모든 코어)을 선택합니다. 여기서 Azure Sphere 앱은 최상위 프로젝트의 이름이거나 F5 키를 누릅니다.

    원격 GDB 디버거 단추

  2. 프로젝트를 빌드하라는 메시지가 표시되면 예를 선택합니다. Visual Studio는 파트너 애플리케이션을 컴파일하고, 이미지 패키지를 만들고, 보드에 사이드로드 하고, 디버그 모드에서 시작합니다. 테스트용 로드 는 애플리케이션이 클라우드를 통해 전달되지 않고 유선 연결을 통해 PC에서 직접 전달됨을 의미합니다.

    출력>표시 출력 보기>: 빌드 출력의 경로를 확인합니다. 이 경로는 PC의 출력 이미지 패키지 위치를 나타냅니다. 배포를 만들 준비가 되면 이미지 패키지의 경로를 알아야 합니다.

  3. 기본적으로 출력 창에는 디바이스 출력의 출력 표시됩니다. 디버거의 메시지를 보려면 출력 표시: 드롭다운 메뉴에서 디버그를 선택합니다. Windows 디버그>메뉴를 통해 프로그램 디스어셈블리, 레지스터 또는 메모리를 검사할 수도 있습니다.

RTApp이 두 개 있는 경우 둘 다 최상위 launch.vs.json 파일에 파트너 앱으로 나열되어 있는지 확인합니다.

Visual Studio 디버거를 사용하여 중단점을 설정하거나, 일시 중지하고, 한 단계씩 실행하거나, 한 단계씩 실행하거나, 다시 시작하거나, 애플리케이션을 중지할 수 있습니다.

C 소스 코드의 중단점에서 중지된 동안 현재 주소, 현재 명령에 대한 어셈블러 니모닉 및 관련된 레지스터 또는 실행 중인 소스 코드 명령과 같은 정보를 표시하는 디스어셈블리 창을 열 수 있습니다.

디스어셈블리 창을 열려면 다음을 수행합니다.

  1. 중단점을 포함하는 C 코드 소스 파일이 Visual Studio에서 열려 있는지 확인합니다.
  2. Windows>디스어셈블리디버그>를 선택하거나 Alt+8을 누릅니다.
  1. 파트너 애플리케이션이 포함된 폴더를 엽니다. Visual Studio Code 작업 영역 파일을 검색하고 작업 영역을 열 것인지 묻습니다. 작업 영역 열기를 선택하여 실시간 애플리케이션과 상위 수준 애플리케이션을 한 번에 모두 엽니다.

  2. 두 CMakeLists.txt 파일 중 하나를 마우스 오른쪽 단추로 클릭하고 모든 프로젝트 빌드를 선택합니다.

  3. Visual Studio Code 작업 표시줄에서 실행 아이콘을 클릭합니다.

  4. 화면 왼쪽 창 맨 위에 표시되는 풀다운 메뉴에서 Azure Sphere Apps(gdb)(작업 영역) 시작을 선택합니다.

  5. F5 키를 눌러 프로젝트를 빌드하고 디버그합니다. 프로젝트가 이전에 빌드되지 않았거나 파일이 변경되고 다시 빌드가 필요한 경우 디버깅이 시작되기 전에 Visual Studio Code 프로젝트를 빌드합니다.

  6. Visual Studio Code 애플리케이션을 빌드하고, 이미지 패키지를 만들고, 보드에 배포하고, 디버그 모드에서 시작할 때까지 몇 초 정도 기다립니다. 출력 창에 상태 업데이트가 표시됩니다.

    먼저 CMake는 애플리케이션을 빌드해야 하는지 여부를 결정합니다. 이 경우 CMake/Build의 출력을 표시하는 출력 창으로 포커스가 이동합니다.

    다음으로, 출력 창에는 이미지 패키지를 디바이스에 배포할 때 출력이 표시됩니다. 마지막으로 디버그 콘솔은 포커스를 받고 gdb 출력을 표시합니다.

Visual Studio Code 디버거를 사용하여 중단점을 설정하고, 일시 중지하고, 한 단계씩 실행하거나, 애플리케이션을 한 단계씩 실행, 다시 시작 또는 중지합니다.

C 소스 코드의 중단점에서 중지된 상태에서 현재 주소, 원시 16진수 데이터, 현재 명령에 대한 어셈블러 니모닉 및 관련된 레지스터 또는 실행 중인 소스 코드 명령과 같은 정보를 보여 주는 디스어셈블리 보기를 열 수 있습니다.

디스어셈블리 보기를 열려면 다음을 수행합니다.

  1. 중단점을 포함하는 C 코드 소스 파일이 Visual Studio Code 편집기에서 열려 있는지 확인합니다.
  2. 편집기 창을 마우스 오른쪽 단추로 클릭하고 디스어셈블리 보기 열기를 선택하거나보기 명령 팔레트>디스어셈블리 보기 열기를 선택합니다>.
  1. 실행 중인 경우 실시간 지원 애플리케이션을 중지합니다.

    az sphere device app stop --component-id <component id>
    
  2. 디버깅을 사용하여 실시간 지원 애플리케이션을 다시 시작합니다.

    az sphere device app start --component-id <component id>
    

    이 명령은 애플리케이션이 실행 중인 코어를 반환합니다.

      <component id>
      App state   : running
      Core        : Real time 0
    
  3. 애플리케이션이 빌드된 sysroot에 대한 Openocd 폴더로 이동합니다. sysroots는 Azure Sphere SDK 설치 폴더에 설치됩니다. 예를 들어 Windows에서 폴더는 기본적으로 Linux/opt/azurespheresdk/Sysroots/*sysroot*/tools/sysroots/x86_64-pokysdk-linux의 에 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Sysroots\*sysroot*\tools\openocd 설치됩니다.

  4. 다음 예제와 같이 를 실행 openocd 합니다. 이 예제에서는 앱이 코어 0에서 실행되고 있다고 가정합니다. 앱이 코어 1에서 실행되는 경우 "targets io0"을 "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. PowerShell, Windows 명령 프롬프트 또는 Linux 명령 셸을 사용하여 명령줄 인터페이스를 엽니다.

  6. 실시간 지원 애플리케이션 .out 파일이 포함된 폴더로 이동하고 GNU Arm Embedded 도구 체인의 일부인 를 시작 arm-none-eabi-gdb합니다.

    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. OpenOCD 서버는 :4444에 GDB 서버 인터페이스를 제공합니다. 디버깅 대상을 설정합니다.

    target remote :4444

  8. 이제 gdb 명령을 실행할 수 있습니다. HandleSendTimerDeferred 함수에 중단점을 추가합니다.

    break HandleSendTimerDeferred

  9. 연결된 터미널 에뮬레이터는 실시간 지원 애플리케이션의 출력을 표시해야 합니다.

  10. 새 Azure Sphere 명령 프롬프트(Windows) 또는 터미널 창(Linux)을 엽니다.

  11. 상위 수준 애플리케이션 .imagepackage 파일이 포함된 폴더로 이동합니다.

  12. 애플리케이션이 실행 중인 경우 애플리케이션을 중지한 다음 디버깅을 사용하여 다시 시작합니다.

    az sphere device app stop --component-id <ComponentId>
    
    az sphere device app start --debug-mode --component-id <ComponentId>
    
  13. 터미널 에뮬레이터를 열고 포트 2342에서 192.168.35.2에 대한 텔넷 또는 TCP 연결을 설정하여 상위 수준 앱의 출력을 확인합니다.

  14. 다음 명령을 사용하여 gdb를 시작합니다.

    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
    

    참고

    Azure Sphere SDK는 애플리케이션 런타임 버전, sysroots 및 베타 API에 설명된 대로 애플리케이션이 다른 API 집합을 대상으로 할 수 있도록 여러 sysroots와 함께 제공됩니다. sysroots는 Sysroots 아래의 Azure Sphere SDK 설치 폴더에 설치됩니다.

  15. 포트 2345에서 원격 디버깅 대상을 IP 주소 192.168.35.2로 설정합니다.

    target remote 192.168.35.2:2345
    
  16. SendMessageToRTApp 함수에 중단점을 추가합니다.

    break SendMessageToRTApp
    
  17. 계속하려면 를 입력 c 하고 텔넷/TCP 터미널에서 출력을 관찰한 다음 실시간 애플리케이션 디버깅 세션이 포함된 명령 프롬프트 또는 터미널 창으로 전환합니다.

  18. 를 입력 c 하여 연결된 직렬 세션에서 출력을 계속 관찰합니다.

실시간 지원 애플리케이션과 상위 수준 애플리케이션 간에 전환하여 디버깅 세션 간에 앞뒤로 작업할 수 있습니다. 두 출력 창에 다음과 유사한 출력이 표시됩니다.

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

각 디버깅 세션을 종료하려면 gdb 프롬프트에 를 입력 q 합니다.