Debugger

Esegui il debug del tuo progetto con Visual Studio Debugger (LLDB) quando utilizzi la classe Estensione per lo sviluppo di giochi Android.

Eseguire il debugger

Prima di poter eseguire il debugger, devi essere in grado di creare, eseguire il deployment e su Android. Per maggiori dettagli, consulta la sezione Eseguire l'esempio.

Dopo aver verificato di poter eseguire il gioco senza il debugger, puoi utilizzare lo del debugger premendo F5 o selezionando l'elemento Avvia debug nel menu Debug. Dovresti visualizzare una finestra di dialogo durante il collegamento del debugger al gioco.

L'avvio del debugger richiede tra 10 secondi e 1 minuto o più a seconda delle dimensioni dell'applicazione e della quantità di simboli necessari da caricare all'avvio. Ci vuole più tempo quando si collega a un nuovo dispositivo la prima volta perché il debugger deve scaricare alcune librerie Android dal dispositivo alla macchina host. Se il primo utilizzo richiede più di 1 minuto tentativi con un nuovo dispositivo, ti consigliamo di annullare la sessione di debug e al riavvio del sistema.

Quando esegui il debugger in questo modo, il gioco viene avviato in In attesa Debugger e non eseguirà alcun codice del tuo gioco fino a quando il debugger si connette. In questo modo puoi anche eseguire il debug della sezione di inizializzazione il tuo gioco.

Per ulteriori informazioni sulle funzionalità di debug di Visual Studio specifiche, consulta leggendo la documentazione di Visual Studio.

Collegamento a un processo

Se vuoi eseguire il debug di un gioco già in esecuzione su un ambiente fisico o virtuale dispositivo, puoi collegare il debugger al processo da Visual Studio.

In Visual Studio, assicurati che sia aperta una soluzione Android e:

  1. Vai al menu Debug e seleziona Allega al processo....
  2. Dal menu a discesa Trasporti, seleziona Estensione per lo sviluppo di giochi Android.
  3. Dal menu a discesa Qualificatore, seleziona il tuo dispositivo Android.
  4. Seleziona il processo di gioco dall'elenco dei processi disponibili e fai clic su Allega.

Allega al processo

Esecuzione di comandi LLDB.Shell

Con una sessione di debug attiva, utilizza la finestra dei comandi di Visual Studio per eseguire LLDB.Shell.

Formato comando:

LLDB.Shell [command]

Esempio:

>LLDB.Shell expr myIntVariable = 9
Status:  Success
Output Message:
(int) $2 = 9

Visualizzazione dati

Identificatore di formato

Puoi modificare il formato in cui viene visualizzato un valore nella sezione Auto, Finestre Locals, Watch e DataTip di variabili utilizzando gli indicatori di formato.

Gli indicatori di formato si trovano alla fine delle espressioni. Iniziano con una virgola seguito da una stringa breve. Ad esempio, l'indicatore ,x in _myInt,x l'espressione formatterà myInt come esadecimale minuscolo.

Gli indicatori di formato possono essere utilizzati direttamente nella finestra Guarda o nella Finestre Auto, Locals e DataTip aggiungendole a Natvis. le espressioni regolari. Per ulteriori informazioni, vedi Natvis.

Elenco di indicatori di assistenza

Nome formato Specificatori Descrizione
boolean B mostra questo valore come booleano vero/falso, utilizzando la regola consuetudine secondo cui 0 è falso e tutto il resto è vero
programma binario | file binario b mostralo come una sequenza di bit
binario, nessun 0b iniziale bb mostra una sequenza di bit senza prefisso 0b
byte y mostrano i byte, ma prova a visualizzarli anche come caratteri ASCII
ad es. (int *) c.sp.x = 50 f8 bf 5f ff 7f 00 00 P.._....
byte con ASCII Y mostrano i byte, ma prova a visualizzarli anche come caratteri ASCII
ad es. (int *) c.sp.x = 50 f8 bf 5f ff 7f 00 00 P.._....
carattere c mostra i byte come caratteri ASCII
, ad esempio (int *) c.sp.x = P\xf8\xbf_\xff\x7f\0\0
carattere stampabile C mostra i byte come caratteri ASCII stampabili
ad es. (int *) c.sp.x = P.._....
numero in virgola mobile complesso F Interpreta questo valore come la parte reale e immaginaria di un numero in virgola mobile complesso
ad es. (int *) c.sp.x = 2,76658e+19 + 4,59163e-41i
decimale D, I mostralo come numero intero firmato (questa operazione non esegue una trasmissione, ma mostra semplicemente i byte come numero intero con segno)
enumerazione E,en mostralo come enumerazione, stampando il nome del valore, se disponibile, oppure il valore intero,
ad es. (enum enumType) val_type = eValue2
esadecimale - minuscolo x, h mostralo in notazione esadecimale minuscola (questa operazione non esegue una trasmissione, ma mostra semplicemente i byte in formato esadecimale)
esadecimale - maiuscolo X, H mostralo in notazione esadecimale maiuscola (questa operazione non esegue una trasmissione, ma mostra semplicemente i byte in formato esadecimale)
esadecimale - minuscolo, nessun numero 0x iniziale xb, hb mostralo in notazione esadecimale minuscola senza prefisso 0x (questo non esegue una trasmissione, ma mostra semplicemente i byte in formato esadecimale)
esadecimale - maiuscolo, senza 0x iniziale Xb, Hb mostralo in notazione esadecimale maiuscola senza prefisso 0x (questo non esegue una trasmissione, ma mostra semplicemente i byte in formato esadecimale)
in virgola mobile f viene visualizzato come numero in virgola mobile (non esegue una trasmissione, ma interpreta semplicemente i byte come un valore in virgola mobile IEEE754)
ottale o mostralo in notazione ottale
Tipo di sistema operativo O mostralo come macOS OSType
ad es. (in virgola mobile) x = '\n\x1f\xd7\n'
stringa - stringa del Do s mostra una stringa C con terminazione 0
ad es. "ciao mondo"
stringa - stringa C, senza virgolette sb indica che è una stringa C con terminazione 0 senza virgolette,
ad es. ciao mondo
stringa - UTF-8 S8 mostra una stringa UTF-8 con terminazione 0
ad es. u8"ciao mondo ☕"
stringa - UTF-8, senza virgolette S8B mostra una stringa UTF-8 con terminazione 0 senza virgolette
ad es. ciao mondo ☕
stringa - UTF-16 su mostra una stringa UTF-16 con terminazione 0
ad es. u"ciao mondo ☕"
stringa - UTF-16, senza virgolette sub mostra una stringa UTF-16 con terminazione 0 senza virgolette
ad es. ciao mondo ☕
stringa - UTF-32 S32 mostra una stringa UTF-32 con terminazione 0
ad es. Ciao mondo ☕"
stringa - UTF-32, senza virgolette S32B mostra una stringa UTF-32 con terminazione 0 senza virgolette
ad es. ciao mondo ☕
Unicode16 U vengono visualizzati come caratteri UTF-16
ad es. (in virgola mobile) x = 0xd70a 0x411f
Unicode 32 U32 vengono visualizzati come caratteri UTF-32
ad es. (in virgola mobile) x = 0x411fd70a
decimale senza segno u mostralo come numero intero senza segno (questa operazione non esegue una trasmissione, ma mostra semplicemente i byte come numero intero senza segno)
puntatore p mostralo come puntatore nativo (a meno che non si tratti di un puntatore, è probabile che l'indirizzo risultante non sia valido)
intero complesso I Interpreta questo valore come la parte reale e immaginaria di un numero intero complesso
ad es. (int *) puntatore = 1048960 + 1i
array di caratteri a indica un array di caratteri,
ad es. (carattere) *c.sp.z = {X}
Raw - Una cruda verità ! formato non elaborato, ignorando la personalizzazione delle viste dei tipi di dati

Natvis

Il framework Natvis consente di personalizzare la modalità di visualizzazione di Visual Studio ai tipi nativi nelle finestre delle variabili del debugger. Ad esempio, usa Natvis per personalizzare la visualizzazione delle finestre Smartwatch, Locals e Dati Suggerimenti.

La funzionalità di Natvis è abilitata per impostazione predefinita, ma può essere disabilitata in Visual Studio impostando Strumenti > Opzioni > Estensione per lo sviluppo di giochi Android > Natvis su Disabled (Disabilitata).

Caricamento dei file Natvis in corso...

Visual Studio carica i file Natvis dalle tre posizioni elencate di seguito. le ricarica a ogni avvio di una sessione di debug. I file devono rispettare le Schema Natvis di Visual Studio 2017.

  • .natvis file che fanno parte di un progetto caricato o di un elemento della soluzione di primo livello.
  • La directory specifica dell'utente (%USERPROFILE%\Documents\Visual Studio 2017\Visualizers)
  • La directory a livello di sistema (%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers)
Ricaricamento dei file Natvis

Ricarica i file Natvis durante una sessione di debug valutando .natvisreload nella Finestra dei comandi o Finestra di visualizzazione.

File Natvis di esempio

Questo file Natvis di esempio include tutti i tag e gli attributi attualmente supportati.

<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

  <Type Name="demo::Vector&lt;*&gt;">
    <AlternativeType Name="MySimilarVectorType&lt;*&gt;"/>

    <!-- Included to show the <SmartPointer> feature is supported. -->
    <SmartPointer Optional="true" Usage="Minimal">ptr</SmartPointer>

    <!-- Included to show the <DisplayString> feature is supported. -->
    <DisplayString Condition="_size == 0" Optional="true">()</DisplayString>
    <DisplayString Condition="_size == 1">(x={_items[0]})</DisplayString>
    <DisplayString Condition="_size == 2">(x={_items[0]}, y={_items[1]})</DisplayString>
    <DisplayString Condition="_size == 3">(x={_items[0]}, y={_items[1]}, z={_items[2]})</DisplayString>
    <DisplayString>[Size={_size,x}] (x={_items[0]}, y={_items[1]}, z={_items[2]}, ...)</DisplayString>

    <!-- Included to show the <StringView> feature is supported. -->
    <StringView Condition="true" Optional="true">_stringViewText</StringView>

    <Expand HideRawView="false">
      <!-- Included to show the <Item> feature is supported. -->
      <Item Name="X" Condition="_size &lt; 4 &amp;&amp; _size &gt;= 1" Optional="true">_items[0]</Item>
      <Item Name="Y" Condition="_size &lt; 4 &amp;&amp; _size &gt;= 2" Optional="true">_items[1]</Item>
      <Item Name="Z" Condition="_size &lt; 4 &amp;&amp; _size &gt;= 3" Optional="true">_items[2]</Item>

      <!-- Included to show the <ArrayItems> feature is supported. -->
      <ArrayItems Condition="_size >= 4" Optional="true">
        <Size Condition="true" Optional="true">_size</Size>
        <ValuePointer Condition="true">_items</ValuePointer>
      </ArrayItems>

      <!-- Included to show the <IndexListItems> feature is supported. -->
      <IndexListItems Condition="true" Optional="true">
        <Size Condition="true" Optional="true">_listSize</Size>
        <ValueNode Condition="true">_list[%i]</ValueNode>
      </IndexListItems>

      <!-- Included to show the <LinkedListItems> feature is supported. -->
      <LinkedListItems Condition="true" Optional="true">
        <Size Optional="true">_listSize</Size>
        <HeadPointer>_head</HeadPointer>
        <NextPointer>_next</NextPointer>
        <ValueNode>_value</ValueNode>
      </LinkedListItems>

      <!-- Included to show the <ExpandedItem> feature is supported. -->
      <ExpandedItem Condition="true" Optional="true">_childVar</ExpandedItem>

      <!-- Included to show the <Synthetic> feature is supported. -->
      <Synthetic Name="[Size]" Condition="true" Optional="true">
        <DisplayString>_size</DisplayString>
        <Expand HideRawView="true">
          <!-- Any supported <Expand> sub-tags. -->
        </Expand>
      </Synthetic>

      <!-- Included to show the <TreeItems> feature is supported. -->
      <TreeItems Condition="true" Optional="true">
        <Size>_treeSize</Size>
        <HeadPointer>_head</HeadPointer>
        <LeftPointer>_left</LeftPointer>
        <RightPointer>_right</RightPointer>
        <ValueNode>_value</ValueNode>
      </TreeItems>

      <!-- Included to show format specifiers are supported. -->
      <Item Name="[Hex Dump at {_index,x}]">myInt[_index],x</Item>
    </Expand>
  </Type>
</AutoVisualizer>

Creazione di file Natvis

Visual Studio supporta la creazione di file Natvis personali. Per ulteriori informazioni sulla personalizzazione delle finestre delle variabili di debug, consulta MSDN.

Debug dei file Natvis

In alcuni casi gli errori verranno presentati come Valore di una variabile (ad es. nel le finestre Auto, Guarda e così via). Ad esempio: <error: use of undeclared identifier 'missingVar'>

Per accedere a ulteriori dettagli sull'errore, apri GoogleAndroid.log dalla barra degli strumenti dell'estensione per lo sviluppo di giochi Android.

Limitazioni note

  • Se il tag o l'attributo non è elencato nel file di esempio riportato sopra, attualmente supportati. Visual Studio ignora i tag e gli attributi non supportati, puoi lasciarli in un file Natvis esistente e il file funzionerà, purché utilizza il nostro schema.

  • L'attributo Usage, sebbene richiesto dallo schema, non è supportato per <SmartPointer>. Tuttavia, LLDB non limita l'accesso agli operatori definiti in C++, in modo che qualsiasi operatore richiesto possa essere invece definito in C++.