Debug e diagnostica nello sviluppo mobile: cosa sono, quali strumenti e come funzionano

Autore: IT Sectr Pubblicato: 2026-04-27 Tempo di lettura: 11 min

Il debug e la diagnostica professionale delle applicazioni mobili sono competenze chiave per lo sviluppo mobile, che consentono di trovare e correggere errori nel codice. Secondo JetBrains Developer Ecosystem (2024), gli sviluppatori dedicano fino al 30% del loro tempo di lavoro al debug del codice. IT Sectr ha sviluppato proprie pratiche diagnostiche che riducono il tempo di ricerca dei bug del 40% grazie all'uso corretto degli strumenti di debug.

Punti chiave

  • Debug e Release — due modalità di build delle applicazioni mobili: Debug con simboli di debug e Release con ottimizzazione per la pubblicazione.
  • Logcat e Console — strumenti principali per visualizzare i log e diagnosticare le applicazioni su Android e iOS.
  • Memory Graph — strumento visivo di Xcode per rilevare perdite di memoria e retain cycle nelle applicazioni iOS.
  • Charles Proxy — proxy HTTP per eseguire il debug e diagnosticare il traffico di rete tra l'app mobile e il server.
  • Postman e Insomnia — client API per testare richieste REST e GraphQL del backend senza eseguire l'app.

Modalità di debug per lo sviluppo mobile: Debug vs Release

Le applicazioni mobili vengono compilate in due configurazioni principali: Debug e Release. La build Debug include simboli di debug, non ottimizza il codice e utilizza una firma temporanea — ciò consente di impostare breakpoint, ispezionare variabili ed eseguire il codice passo dopo passo.

La build Release per lo sviluppo mobile è la versione finale per App Store e Google Play. Release ottimizza il codice, rimuove simboli e log non necessari e firma l'app con un certificato di produzione. Il debug su Release è impossibile — se un bug si riproduce solo su Release, sono necessari Crashlytics o altri crash reporter.

La strategia corretta per le app mobili: Debug per lo sviluppo, Release per i test prima della pubblicazione. IT Sectr consiglia di eseguire la build Release su dispositivi di test 2-3 giorni prima del rilascio per identificare problemi che non si manifestano in modalità Debug (ad esempio, offuscamento del codice o errori ProGuard/R8).

Debuggable=false è un'impostazione obbligatoria per Release in AndroidManifest. iOS Debug e Release differiscono per lo schema di build in Xcode — Debug include Debug executable, Release no. iOS ha anche una configurazione TestFlight (con crash report) e App Store.

Strumenti Android: Logcat, Layout Inspector, Database Inspector

Android Studio fornisce un set completo di strumenti per eseguire il debug e diagnosticare applicazioni mobili sulla piattaforma Android. Logcat è la console dei log di sistema Android, lo strumento principale per visualizzare i log, filtrabile per livello (Verbose, Debug, Info, Warn, Error), processo e tag.

Logcat — Nozioni di base

Logcat mostra i log di tutti i processi sul dispositivo o emulatore. Ogni log ha un livello di priorità, un tag e un messaggio — usa Log.d(TAG, message) per messaggi di debug, Log.e per errori. Il filtraggio per tag è il modo migliore per trovare i tuoi log tra migliaia di messaggi di sistema.

Esempio di output log nello sviluppo mobile su Android:

java
private static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "onCreate started");
    try {
        initComponents();
        Log.i(TAG, "Components initialized successfully");
    } catch (Exception e) {
        Log.e(TAG, "Failed to init components", e);
    }
}

Layout Inspector — debugger visivo dell'interfaccia per Android, mostra la gerarchia delle View, gli attributi di ogni elemento e la sua posizione sullo schermo. Consente di verificare i parametri di layout, padding, margin, visibilità e dimensioni del testo su un'app in esecuzione.

Database Inspector — visualizza e modifica i database SQLite direttamente in Android Studio, mostra il contenuto di tutte le tabelle, consente di eseguire query SQL e modificare dati in tempo reale — uno strumento indispensabile per eseguire il debug di query Room e ContentProvider.

Network Inspector — tiene traccia di tutte le richieste HTTP dell'app, mostrando URL, intestazioni, corpo della richiesta e risposta, tempo di esecuzione e codice di stato. Aiuta a eseguire il debug dell'API REST, verificare la correttezza della serializzazione e rilevare richieste lente.

Il debug e la diagnostica completi delle applicazioni mobili su Android richiedono la padronanza di tutti gli strumenti elencati. Android Studio li combina in un unico IDE per una maggiore efficienza.

Strumenti iOS: Console, Memory Graph, View Hierarchy

Xcode fornisce un set simile di strumenti per eseguire il debug e diagnosticare applicazioni mobili su iOS. Console è l'equivalente iOS di Logcat, che mostra i log di sistema e dell'app raggruppati per categoria e livello (OSLogType).

Memory Graph — Diagnostica delle perdite di memoria

Memory Graph Debugger è uno strumento visivo per rilevare retain cycle e perdite di memoria, che mostra un grafico di tutti gli oggetti in memoria con i loro riferimenti. I nodi rossi indicano perdite — oggetti che avrebbero dovuto essere liberati ma sono ancora in memoria.

Uso di Memory Graph: esegui l'app, fai clic sul pulsante Debug Memory Graph in Xcode, seleziona un oggetto e ispeziona i suoi riferimenti in entrata. Un retain cycle appare come una dipendenza circolare: l'oggetto A trattiene l'oggetto B, l'oggetto B trattiene l'oggetto A. La soluzione è usare riferimenti deboli o non posseduti nelle closure.

View Hierarchy Debugger è l'equivalente iOS di Layout Inspector, che mostra una visualizzazione 3D di tutte le UIView sullo schermo con la loro gerarchia, vincoli e attributi. Consente di selezionare qualsiasi elemento per vedere la sua posizione, colore, dimensione e vincoli di layout.

Heap Dump è un'istantanea dell'intera memoria dell'app, la cui analisi aiuta a trovare oggetti che non vengono liberati e a stimare l'utilizzo totale di memoria di ogni classe. In Xcode, Heap Dump è disponibile tramite Memory Report in Debug Navigator.

LLDB è un debugger di basso livello per applicazioni C, Objective-C e Swift, che supporta breakpoint, watchpoint, dump assembly e modifica dinamica delle variabili. Il comando po (print object) in LLDB restituisce la descrizione di qualsiasi oggetto in memoria.

Watchpoint è un punto di interruzione che si attiva quando cambia il valore di una variabile, utile per tracciare chi e quando modifica il valore di un campo oggetto. A differenza di un breakpoint, che si attiva in una riga specifica, un watchpoint si attiva a qualsiasi modifica della memoria.

Il debug e la diagnostica professionali su iOS richiedono esperienza con Xcode e comprensione della gestione della memoria. Apple fornisce documentazione completa per ogni strumento di debug.

Debugger di rete: Charles Proxy, Proxyman, Wireshark

Gli strumenti proxy sono essenziali per diagnosticare i problemi di rete nelle applicazioni mobili. Charles Proxy è il proxy HTTP più popolare per lo sviluppo mobile, che consente di intercettare, visualizzare e modificare le richieste tra l'app e il server.

Charles Proxy — Intercettazione del traffico

Charles Proxy funge da intermediario: configuri il dispositivo per utilizzare Charles come proxy (solitamente IP del computer, porta 8888). Charles mostra tutte le richieste HTTP e HTTPS con la possibilità di visualizzare intestazioni, corpo, cookie e tempo di esecuzione. SSL Proxying consente di decrittare il traffico HTTPS per l'analisi.

Funzionalità di Charles: Breakpoints (mettere in pausa una richiesta per modificarla), Rewrite (modifica automatica delle richieste), Map Local (sostituire le risposte con file locali). Map Local è indispensabile per testare senza API reale — restituisci un JSON preparato in anticipo invece di una risposta del server.

Proxyman è un'alternativa moderna a Charles per macOS con interfaccia più pulita, migliore supporto per M1 e M2 e protezione della privacy. Supporta le stesse funzionalità: intercettazione, proxy SSL, modifica delle richieste e script per la modifica automatica del traffico.

Wireshark è un analizzatore di traffico professionale per la diagnostica di rete approfondita, che analizza tutti i livelli OSI: TCP, DNS, handshake TLS, ICMP. Utilizzato per diagnosticare connessioni lente, problemi DNS ed errori di rete di basso livello.

Stetho è una libreria di Facebook per eseguire il debug di app Android tramite il browser Chrome, che consente di visualizzare database, richieste di rete, View Hierarchy e Shared Preferences tramite Chrome DevTools. Flipper è il successore di Stetho con supporto iOS e architettura a plugin.

Strumenti API: Postman, Insomnia

I client API vengono utilizzati per eseguire il debug e diagnosticare il backend delle applicazioni mobili senza eseguire l'app stessa. Postman è il client API più popolare con raccolte, test e automazione, che consente di inviare richieste GET, POST, PUT, DELETE e gestire intestazioni, cookie e variabili d'ambiente.

Insomnia è un'alternativa leggera e open source a Postman con interfaccia più veloce, supporto GraphQL integrato e migliore organizzazione delle raccolte. Supporta plugin: temi, esportazione, generazione di codice in diversi linguaggi.

Httpie è un client HTTP da riga di comando con output leggibile, che mostra la risposta JSON colorata, le intestazioni e lo stato direttamente nel terminale. Adatto per controlli API rapidi senza aprire un'applicazione GUI.

Esempio di utilizzo di Httpie:

bash
http POST https://api.example.com/v1/users \
    "Authorization: Bearer token123" \
    name="John" email="john@example.com"

IT Sectr raccomanda la combinazione: Postman per analisi e documentazione API + Httpie per controlli rapidi. Importa una raccolta Postman dalla specifica Swagger o OpenAPI — questo garantisce che gli endpoint testati corrispondano alla documentazione del server.

Strumento Piattaforma Tipo di debug Gratuito Miglior utilizzo
Logcat Android Registrazione + Visualizzare i log dell'app e di sistema
Layout Inspector Android UI/View + Verificare gerarchia e attributi delle View
Memory Graph iOS Memoria + Diagnostica delle perdite di memoria
View Hierarchy iOS UI/View + Visualizzazione 3D di UIView
Charles Proxy iOS/Android Rete Prova 30 giorni Intercettazione traffico HTTP/HTTPS
Proxyman iOS/Android Rete + (limitato) Proxy HTTP moderno per macOS
Wireshark Tutte le piattaforme Rete (profondo) + Analisi di tutti i livelli OSI
Postman Tutte le piattaforme API + Test API REST/GraphQL
Insomnia Tutte le piattaforme API + Alternativa a Postman con GraphQL
LLDB iOS/macOS Basso livello + Debug passo-passo, assembly

Domande frequenti

In che modo Debug differisce da Release nello sviluppo mobile?

La build Debug contiene simboli di debug, non ottimizza il codice e usa una firma temporanea. La build Release ottimizza il codice, rimuove i log, offusca e firma con un certificato di produzione. Debug si installa via USB o emulatore, Release — tramite App Store o Google Play.

Come trovare una perdita di memoria su Android?

Usa Memory Profiler in Android Studio — mostra gli oggetti allocati e liberati e gli eventi GC. Esegui un Heap Dump e analizza gli oggetti che non vengono liberati. Cerca istanze di Activity e Fragment che rimangono in memoria dopo finish(). Usa LeakCanary — la libreria rileva automaticamente le perdite.

Come decrittare il traffico HTTPS tramite Charles Proxy?

Sul computer: attiva SSL Proxying in Charles (Proxy → SSL Proxying Settings). Sul dispositivo: installa il certificato CA di Charles (chls.pro/ssl) e fidati di esso nelle impostazioni. Su iOS 13+, attiva la fiducia del certificato in General → About → Certificate Trust Settings. Su Android 7+ è necessaria la configurazione network_security_config.xml.

Cosa sono Breakpoint e Watchpoint?

Un breakpoint interrompe l'esecuzione in una riga specifica di codice. Un watchpoint interrompe l'esecuzione quando cambia il valore di una variabile. Un breakpoint si attiva ogni volta che si raggiunge la riga, un watchpoint si attiva a qualsiasi modifica della memoria tracciata. I watchpoint sono utili per trovare modifiche impreviste dei campi.

Come eseguire il debug di richieste GraphQL?

Usa Apollo DevTools (estensione del browser) o Insomnia con supporto GraphQL. Charles e Proxyman intercettano le richieste GraphQL come normali HTTP POST — puoi visualizzare query, variabili e risposte. Per il debug dettagliato — Apollo Client Developer Tools.

Riepilogo

  • Debug e Release — diverse configurazioni di build per lo sviluppo e la pubblicazione di applicazioni mobili
  • Logcat e Console — strumenti di base per visualizzare i log su Android e iOS
  • Memory Graph e Heap Dump — strumenti visivi per la diagnostica delle perdite di memoria
  • Layout Inspector e View Hierarchy — debug dell'interfaccia tramite gerarchia e attributi degli elementi
  • Charles Proxy e Wireshark — intercettazione del traffico e analisi di rete a tutti i livelli OSI
  • Postman e Insomnia — test API REST e GraphQL senza eseguire l'app
  • LLDB e Watchpoint — debug di basso livello con monitoraggio delle modifiche alla memoria

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto