Debug dans le développement mobile — définition, modes de débogage et fonctionnement

Auteur : IT Sectr Publié le : 2026-05-06 Temps de lecture : 8 min

Debug (mode débogage) — est une configuration de build pour applications mobiles dans laquelle le compilateur inclut des informations symboliques, désactive l'optimisation du code et connecte le débogueur pour une analyse pas à pas de l'exécution. Selon Android Developers, un build Debug contient des symboles de débogage, ne compresse pas les ressources et permet de connecter un inspecteur de base de données et de requêtes réseau. Le mode Debug s'oppose au build Release : dans Debug, le développeur sacrifie les performances pour la transparence de l'exécution du code.

Points clés

  • Debug — configuration de build avec informations de débogage, optimisation désactivée et accès au débogueur
  • Débogueur permet de définir des points d'arrêt, d'inspecter les variables et d'exécuter le code pas à pas
  • Build Debug est signé avec un certificat de débogage et ne peut pas être publié sur les magasins d'applications
  • LLDB est le débogueur principal pour iOS/macOS, et LLDB dans Android Studio pour Android
  • Performances des builds Debug sont inférieures à Release en raison de l'absence d'optimisations du compilateur

Qu'est-ce que le mode Debug dans le développement mobile

Debug n'est pas seulement un drapeau du compilateur, mais un ensemble complet de paramètres qui rendent l'application transparente pour le développeur. En mode Debug, le compilateur ajoute une table de noms symboliques (DWARF) au fichier exécutable, qui relie le code machine aux lignes source. Sans cette table, le débogueur ne peut pas montrer quelle ligne de code est en cours d'exécution.

Débogueur (debugger) est un programme qui exécute votre application dans un environnement contrôlé. Vous pouvez suspendre l'exécution à n'importe quelle ligne (point d'arrêt), visualiser les valeurs de toutes les variables dans la portée actuelle, les modifier à la volée et continuer l'exécution. Pour les plateformes mobiles, le débogueur standard est LLDB — un composant LLVM utilisé à la fois dans Xcode et Android Studio.

Le mode Debug inclut également des vérifications supplémentaires qui sont désactivées en Release : assertions, vérifications des limites de tableaux, détecteurs de fuites mémoire et journalisation étendue. Ces vérifications ralentissent l'application mais détectent les erreurs dès les premiers stades de développement — avant que le code n'atteigne l'utilisateur.

Debug vs Release : différences clés entre les builds

La différence entre les builds Debug et Release est fondamentale : ce sont deux ensembles différents de drapeaux du compilateur, de configurations de signature et de paramètres d'empaquetage. Comprendre ces différences permet d'éviter les situations où « ça marche sur le simulateur mais pas sur un vrai appareil ».

ParamètreDebugRelease
OptimisationDésactivée (-O0)Activée (-Os ou -O2)
SymbolesTable DWARF complèteSupprimés
SignatureCertificat de développementCertificat de distribution
ProfilsProfil de provisionnement DebugProfil App Store / Ad Hoc
JournalisationComplete (tous les niveaux)Désactivée ou minimale
OffuscationDésactivéeActivée (ProGuard/R8)
Taille .apk/.ipaPlus grande (symboles + sans compression)Plus petite (R8 + ressources)

Quand utiliser quoi

Build Debug est utilisé à toutes les étapes du développement et des tests sur les appareils locaux. Le build Release est assemblé avant l'envoi à App Store Connect ou Google Play Console. Déboguer sur un build Release est techniquement possible mais extrêmement inconfortable en raison des méthodes renommées (R8) et de l'absence de symbolication pour les journaux de crash.

Problèmes de changement de mode

Un problème courant est le code qui fonctionne en Debug mais plante en Release. La cause est un UB (comportement indéfini) dans le code que le compilateur traite différemment selon les niveaux d'optimisation. Un exemple typique : lire une variable non initialisée ou violer le strict aliasing. Pour détecter ces erreurs, utilisez un analyseur statique (Clang Static Analyzer, ktlint) avant chaque build Release.

Outils de débogage : LLDB, points d'arrêt et inspecteurs

LLDB est un débogueur haute performance basé sur LLVM, supportant C, C++, Objective-C, Swift et Kotlin/Native. LLDB fournit une interface REPL dans laquelle vous pouvez exécuter des expressions arbitraires, modifier des valeurs de variables et appeler des fonctions dans le contexte d'une application suspendue.

Points d'arrêt et leurs types

Point d'arrêt est un outil clé du débogueur. Vous placez un point sur une ligne de code, et l'application se suspend lorsque l'exécution atteint cette ligne. LLDB supporte plusieurs types de points d'arrêt : conditionnels (ne se déclenchent que si une condition est remplie), symboliques (sur appel de fonction) et à usage unique (se déclenchent une fois et sont supprimés automatiquement).

Watchpoints et inspecteurs mémoire

Watchpoint est un point d'observation des modifications d'une variable. Vous spécifiez une adresse mémoire, et le débogueur suspend l'exécution lors de toute écriture à cette adresse. Cet outil est indispensable pour trouver les courses de données et les mutations incorrectes d'objets partagés. Pour visualiser la hiérarchie UIKit, utilisez l'UIView Inspector disponible dans Xcode.

lldb
// Définir un point d'arrêt conditionnel
(lldb) breakpoint set --name "viewDidLoad" --condition "self.isViewLoaded == false"

// Watchpoint sur propriété
(lldb) watchpoint set variable self->_loadingState

// Exécuter du code dans le contexte suspendu
(lldb) expr self.view.backgroundColor = UIColor.redColor

Inspecteurs Xcode et Android Studio

Les deux IDE fournissent des inspecteurs graphiques au-dessus de LLDB. Android Studio inclut Layout Inspector (hiérarchie des vues), Network Inspector (traçage des requêtes HTTP) et Database Inspector (SQLite en temps réel). Xcode fournit Debug Memory Graph (analyse des fuites mémoire) et View Debugger (vue 3D des couches UIKit).

Débogage à distance et par Wi-Fi

À partir d'Android 11, le débogage par Wi-Fi fonctionne sans connexion USB : il suffit de scanner le code QR depuis Android Studio. iOS supporte le débogage Wi-Fi depuis Xcode 9+ — l'appareil se connecte une fois via USB, après quoi les sessions de débogage peuvent s'exécuter sur le réseau. Le débogage Wi-Fi n'est pas adapté aux serveurs CI en raison de la latence imprévisible et de la perte de paquets, donc les pipelines automatisés utilisent toujours l'USB. Cependant, pour le développement local, le débogage Wi-Fi est nettement plus pratique — le développeur n'est pas attaché à un câble et peut tester l'application sur un appareil à l'autre bout de la pièce.

Debug sur Android : Android Studio et débogage via ADB

Android Debug Bridge (ADB) est un outil universel pour interagir avec un appareil Android depuis la ligne de commande. Via ADB, vous pouvez installer une application, lancer le débogage, copier des fichiers, exécuter des commandes shell et visualiser les journaux. Android Studio utilise ADB en interne pour toutes les opérations de débogage.

Connexion du débogueur dans Android Studio

Android Studio supporte deux modes de débogage : Run (lancement normal) et Debug (lancement avec débogueur connecté). En mode Debug, vous pouvez définir des points d'arrêt directement dans l'éditeur, inspecter les variables dans la fenêtre Debug Tool et évaluer des expressions dans Evaluate Expression. Pour déboguer les processus en arrière-plan (Service, BroadcastReceiver), utilisez Attach Debugger to Android Process.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Le point d'arrêt ici suspendra l'exécution
        val button = findViewById<Button>(R.id.btn_debug)
        button.setOnClickListener {
            startDebugProcess()
        }
    }

    private fun startDebugProcess() {
        val data = fetchDataFromApi()
        Log.d("Debug", "Data loaded: $data")
    }
}

Shell ADB et inspection de base de données

Les commandes shell ADB donnent accès au système de fichiers de l'appareil sans privilèges root. Vous pouvez visualiser le contenu du répertoire databases, copier le fichier .db sur votre ordinateur et l'ouvrir avec n'importe quel client SQLite. Android Studio Database Inspector automatise ce processus : vous voyez les données de la base de données en direct en temps réel et pouvez exécuter des requêtes SQL directement depuis l'IDE.

Debug sur iOS : Xcode, débogueur et diagnostic

Xcode fournit un environnement de débogage intégré basé sur LLDB. Le développeur peut exécuter l'application sur un simulateur ou un appareil physique, définir des points d'arrêt et utiliser le Debug Navigator pour contrôler les threads d'exécution. Contrairement à Android, iOS ne permet pas d'exécuter deux builds Debug simultanément sur le même appareil sans configuration spéciale.

Débogage sur simulateur et appareil

Le simulateur exécute l'application comme un processus macOS natif, offrant le cycle de débogage le plus rapide. Sur un appareil physique, le débogage s'effectue via USB ou Wi-Fi (à partir d'iOS 16), et LLDB communique avec debugserver sur l'appareil. Les performances de débogage sur l'appareil sont inférieures en raison de la bande passante limitée de l'USB 2.0, mais seul un appareil physique permet de tester des scénarios réels : notifications push, caméra, capteurs.

swift
import UIKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    private func setupUI() {
        let label = UILabel()
        label.text = "Mode Debug"
        label.textColor = .systemBlue
        view.addSubview(label)
    }
}

Diagnostic et rapports de crash

Xcode Organizer collecte les journaux de crash des appareils des testeurs via Crash Logs. La symbolication (conversion des adresses en noms de fonctions) nécessite le fichier .dSYM, qui est généré avec chaque build Debug. Dans un build Release, le dSYM est également créé, mais les journaux de crash de l'App Store doivent être téléchargés dans Organizer manuellement ou via le service bitcode.

Questions fréquentes

Peut-on exécuter un build Debug sur l'appareil d'un utilisateur ?

Techniquement oui — via une distribution Ad Hoc avec un certificat Debug, mais Apple et Google ne le recommandent pas. Un build Debug contient des symboles de débogage et des performances réduites, ce qui dégrade l'UX et augmente la taille de l'application de 2 à 3 fois.

Pourquoi un build Debug est-il plus lent que Release ?

La raison est l'optimisation du compilateur désactivée (-O0). Le compilateur n'inline pas les fonctions, ne supprime pas le code mort et conserve toutes les variables intermédiaires. De plus, Debug inclut des vérifications d'assertions et de limites de tableaux absentes dans Release.

Comment configurer le débogage Wi-Fi pour iOS ?

Dans Xcode choisissez Window → Devices and Simulators, cochez « Connect via network » pour votre appareil. L'appareil et le Mac doivent être sur le même réseau Wi-Fi. Après une connexion via USB, le débogage fonctionnera par Wi-Fi lors des lancements suivants.

Qu'est-ce que « attach to process » dans Android Studio ?

Attach to process permet de connecter le débogueur à un processus déjà en cours sans redémarrer l'application. Ceci est utile pour déboguer les Services, BroadcastReceivers ou les processus démarrés par un événement système, où le Debug Run standard n'est pas applicable.

Comment voir NSLog et print dans un build Release ?

NSLog et print par défaut n'affichent les journaux qu'en configuration Debug. Pour Release, utilisez os_log avec le drapeau OSLogType.default — il enregistre les messages dans le Unified Logging System et est accessible via Console.app sur Mac.

Résumé

  • Build Debug inclut des symboles de débogage, désactive l'optimisation et utilise un certificat de signature de développement
  • LLDB est le débogueur principal pour les deux plateformes, supportant les points d'arrêt, les watchpoints et REPL
  • Les différences entre Debug et Release affectent l'optimisation, les symboles, la signature, l'offuscation et la taille du build
  • ADB pour Android et debugserver pour iOS assurent la communication IDE-appareil
  • Les performances des builds Debug sont 2 à 5 fois inférieures en raison des optimisations désactivées
  • Les journaux de crash dans les builds Debug contiennent des noms de fonctions lisibles ; Release nécessite une symbolication via dSYM

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi