Formazione
Percorso di apprendimento
Eseguire il debug di applicazioni console C# (Introduzione a C#, Parte 6) - Training
Eseguire il debug di applicazioni console C# (Introduzione a C#, Parte 6)
Questo browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
Importante
Visual Studio App Center è previsto per il ritiro il 31 marzo 2025. Anche se è possibile continuare a usare Visual Studio App Center fino a quando non viene completamente ritirato, esistono diverse alternative consigliate che è possibile considerare la migrazione a.
Altre informazioni sulle sequenze temporali di supporto e sulle alternative.
Gli arresti anomali di App Center genereranno automaticamente un log di arresto anomalo ogni volta che l'app si arresta in modo anomalo. Il log viene prima scritto nella risorsa di archiviazione del dispositivo e quando l'utente avvia di nuovo l'app, il report di arresto anomalo verrà inviato a App Center. La raccolta di arresti anomali funziona sia per le app beta che per quelle inviate a Windows Store. I log di arresto anomalo contengono informazioni preziose per risolvere gli arresti anomali.
App Center SDK raccoglie solo arresti anomali causati da eccezioni .NET non gestite. Non raccoglie arresti anomali nativi, ad esempio quando si usa C o C++. Tuttavia, se si dispone di un'app con arresti anomali C++, è possibile caricarli in App Center tramite l'API di caricamento arresti anomali.
Seguire la sezione Introduzione se non è ancora stato configurato l'SDK nell'applicazione.
Nota
Attualmente non è supportato il rilevamento degli avvisi di memoria insufficiente nella piattaforma UWP/WinUI.
Install-Package Microsoft.AppCenter.Crashes
Aggiungere gli spazi dei nomi appropriati prima di usare le API.
using Microsoft.AppCenter.Crashes;
Aggiungere o modificare la chiamata seguente al costruttore dell'applicazione per includere il modulo arresti anomali:
AppCenter.Start("{Your App Secret}", typeof(Crashes));
Gli arresti anomali di App Center offrono un'API per generare un arresto anomalo del test per un semplice test dell'SDK. Questa API controlla le configurazioni di debug e versione. È quindi possibile usarlo solo quando si esegue il debug perché non funzionerà per le app per la versione.
Crashes.GenerateTestCrash();
Gli arresti anomali di App Center hanno due API che forniscono altre informazioni in caso di arresto anomalo dell'app.
In qualsiasi momento dopo l'avvio dell'SDK, è possibile verificare se l'app si è arrestata in modo anomalo nell'avvio precedente:
bool didAppCrash = await Crashes.HasCrashedInLastSessionAsync();
Questo è utile nel caso in cui si vuole modificare il comportamento o l'interfaccia utente dell'app dopo un arresto anomalo. Alcuni sviluppatori scelgono di visualizzare un'interfaccia utente aggiuntiva per scusarsi con gli utenti o si vuole che un modo per entrare in contatto dopo un arresto anomalo si è verificato un arresto anomalo.
Nota
Questo metodo deve essere usato solo dopo Crashes
l'avvio. Verrà sempre restituito false
prima dell'avvio.
Se l'app si è bloccata in precedenza, è possibile ottenere informazioni dettagliate sull'ultimo arresto anomalo.
ErrorReport crashReport = await Crashes.GetLastSessionCrashReportAsync();
Nota
Questo metodo deve essere usato solo dopo Crashes
l'avvio. Verrà sempre restituito null
prima dell'avvio.
Esistono numerosi casi d'uso per questa API, quello più comune è la gente che chiama questa API e implementa il delegato o il listener personalizzati degli arresti anomali.
Gli arresti anomali di App Center offrono callback per gli sviluppatori per eseguire azioni aggiuntive prima e quando si inviano log di arresto anomalo a App Center.
Nota
Impostare il callback prima di chiamare AppCenter.Start()
, poiché App Center avvia l'elaborazione si arresta in modo anomalo immediatamente dopo l'avvio.
Impostare questo callback se si vuole decidere se è necessario elaborare o meno un arresto anomalo specifico. Ad esempio, potrebbe verificarsi un arresto anomalo a livello di sistema che si vuole ignorare e che non si vuole inviare a App Center.
Crashes.ShouldProcessErrorReport = (ErrorReport report) =>
{
// Check the report in here and return true or false depending on the ErrorReport.
return true;
};
Se la privacy degli utenti è importante per te, potresti voler ottenere la conferma dell'utente prima di inviare un report di arresto anomalo all'App Center. L'SDK espone un callback che indica agli arresti anomali di App Center di attendere la conferma dell'utente prima di inviare eventuali report di arresto anomalo.
Se si sceglie di farlo, si è responsabili dell'acquisizione della conferma dell'utente, ad esempio tramite una richiesta di dialogo con una delle opzioni seguenti: Always Send, Send e Don't send. In base all'input, si indicherà agli arresti anomali di App Center cosa fare e l'arresto anomalo verrà quindi gestito di conseguenza.
Nota
L'SDK non visualizza una finestra di dialogo per questa operazione, l'app deve fornire la propria interfaccia utente per richiedere il consenso dell'utente.
Nota
L'app non deve chiamare NotifyUserConfirmation
in modo esplicito se non implementa una finestra di dialogo di conferma utente. Il modulo Arresti anomali gestirà l'invio implicito dei log.
Il callback seguente illustra come indicare all'SDK di attendere la conferma dell'utente prima di inviare arresti anomali:
Crashes.ShouldAwaitUserConfirmation = () =>
{
// Build your own UI to ask for user consent here. The SDK doesn't provide one by default.
// Return true if you built a UI for user consent and are waiting for user input on that custom UI, otherwise false.
return true;
};
Nel caso in cui venga restituito true
il callback precedente, l'app deve ottenere (usando il proprio codice) l'autorizzazione dell'utente e il messaggio dell'SDK con il risultato usando l'API seguente.
// Depending on the user's choice, call Crashes.NotifyUserConfirmation() with the right value.
Crashes.NotifyUserConfirmation(UserConfirmation.DontSend);
Crashes.NotifyUserConfirmation(UserConfirmation.Send);
Crashes.NotifyUserConfirmation(UserConfirmation.AlwaysSend);
A volte, si vuole conoscere lo stato dell'arresto anomalo dell'app. Un caso d'uso comune è che è possibile visualizzare l'interfaccia utente che indica agli utenti che l'app invia un report di arresto anomalo o, nel caso in cui l'app si arresta in modo anomalo rapidamente dopo l'avvio, si vuole modificare il comportamento dell'app per assicurarsi che i log di arresto anomalo possano essere inviati. Gli arresti anomali di App Center offrono tre callback diversi che è possibile usare nell'app per ricevere una notifica delle operazioni seguenti:
Crashes.SendingErrorReport += (sender, e) =>
{
// Your code, e.g. to present a custom UI.
};
In caso di problemi di rete o interruzione nell'endpoint e riavvio dell'app, SendingErrorReport
viene attivata nuovamente dopo il riavvio del processo.
Crashes.SentErrorReport += (sender, e) =>
{
// Your code, e.g. to hide the custom UI.
};
Crashes.FailedToSendErrorReport += (sender, e) =>
{
// Your code goes here.
};
La ricezione FailedToSendErrorReport
indica un errore non recuperabile, ad esempio un codice 4xx . Ad esempio, 401 significa che l'errore appSecret
è errato.
Questo callback non viene attivato se si tratta di un problema di rete. In questo caso, l'SDK continua a ripetere i tentativi (e sospende anche i tentativi mentre la connessione di rete è inattiva).
È possibile aggiungere allegati binari e di testo a un report di arresto anomalo. L'SDK li invierà insieme all'arresto anomalo in modo da poterli visualizzare nel portale di App Center. Il callback seguente verrà richiamato subito prima di inviare l'arresto anomalo archiviato dall'avvio dell'applicazione precedente. Non verrà richiamato quando si verifica l'arresto anomalo. Assicurarsi che il file allegato non sia denominato minidump.dmp
come tale nome è riservato per i file minidump. Ecco un esempio di come collegare il testo e un'immagine a un arresto anomalo:
Crashes.GetErrorAttachments = (ErrorReport report) =>
{
// Your code goes here.
return new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),
ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")
};
};
Nota
Il limite di dimensioni è attualmente 7 MB. Il tentativo di inviare un allegato più grande attiverà un errore.
È possibile abilitare e disabilitare gli arresti anomali del Centro app in fase di esecuzione. Se la disabilita, l'SDK non eseguirà alcuna segnalazione di arresto anomalo per l'app.
Crashes.SetEnabledAsync(false);
Per abilitare di nuovo gli arresti anomali di App Center, usare la stessa API ma passare true
come parametro.
Crashes.SetEnabledAsync(true);
Non è necessario attendere questa chiamata per effettuare altre chiamate API (ad esempio IsEnabledAsync
) coerenti.
Lo stato viene mantenuto nello spazio di archiviazione del dispositivo tra i lanci dell'applicazione.
È anche possibile verificare se gli arresti anomali di App Center sono abilitati o meno:
bool isEnabled = await Crashes.IsEnabledAsync();
App Center consente anche di tenere traccia degli errori usando eccezioni gestite. A tale scopo, usare il TrackError
metodo:
try {
// your code goes here.
} catch (Exception exception) {
Crashes.TrackError(exception);
}
Un'app può facoltativamente collegare le proprietà a un report di errore gestito per fornire ulteriore contesto. Passare le proprietà come dizionario di coppie chiave/valore (solo stringhe) come illustrato nell'esempio seguente.
try {
// your code goes here.
} catch (Exception exception) {
var properties = new Dictionary<string, string>
{
{ "Category", "Music" },
{ "Wifi", "On"}
};
Crashes.TrackError(exception, properties);
}
È anche possibile aggiungere allegati binari e di testo a un report di errore gestito. Passare gli allegati come matrice di ErrorAttachmentLog
oggetti, come illustrato nell'esempio seguente.
try {
// your code goes here.
} catch (Exception exception) {
var attachments = new ErrorAttachmentLog[]
{
ErrorAttachmentLog.AttachmentWithText("Hello world!", "hello.txt"),
ErrorAttachmentLog.AttachmentWithBinary(Encoding.UTF8.GetBytes("Fake image"), "fake_image.jpeg", "image/jpeg")
};
Crashes.TrackError(exception, attachments: attachments);
}
Formazione
Percorso di apprendimento
Eseguire il debug di applicazioni console C# (Introduzione a C#, Parte 6) - Training
Eseguire il debug di applicazioni console C# (Introduzione a C#, Parte 6)