← Retour au blog
tech 12 juillet 2026

Où est passé mon segfault ?

Découvre pourquoi ton programme C ne signale pas de segfault et comment y remédier. Plongée dans les mécanismes de bash et les signaux de segmentation.

Article inspiré de la source originale
Where did my segfault go? ↗ rmpr.xyz

Introduction

Si tu es développeur C, tu as probablement déjà rencontré un segfault (ou faute de segmentation). Ce classique des erreurs survient lorsque ton programme tente d'accéder à une mémoire interdite. Cependant, il peut arriver que ton programme plante sans afficher ce message d'erreur explicite. Alors, où est passé ton segfault ?

Le Mystère du Segfault Invisible

L'autre jour, en travaillant sur un petit programme C, j'utilisais entr pour surveiller les modifications de fichier et recompiler automatiquement. Malgré un segfault évident, rien n'apparaissait dans ma console. Après plusieurs tentatives, j'ai découvert que le problème venait de la manière dont bash gère les processus enfants.

Comprendre le Comportement de Bash

Lorsque tu exécutes une commande avec bash -c, si cette commande est la seule à exécuter, bash remplace le processus courant par la commande (exec). Cela optimise l'exécution mais a pour conséquence d'empêcher bash d'imprimer le message d'erreur lorsque le processus enfant meurt d'un segfault.

Solution 1 : Utiliser un Script Wrapper

Une des solutions consiste à encapsuler ta commande dans un script. En exécutant ce script avec entr, bash démarre un nouveau processus pour le script, ce qui permet d'afficher le message de segfault.

``bash #!/bin/bash gcc -o hello hello.c && ./hello ``

Solution 2 : Utiliser un Sous-shell

Une autre approche consiste à exécuter la commande dans un sous-shell en utilisant des parenthèses (). Cette méthode force bash à forker un nouveau processus, garantissant ainsi que le message de segfault s'affiche.

``bash ls hello.c | entr -s "gcc -o hello hello.c && (./hello)" ``

Solution 3 : Ajouter une Commande Après le Crash

Pour forcer bash à ne pas remplacer le processus, ajoute simplement une commande après celle qui pourrait planter. Par exemple, true est une commande qui ne fait rien, mais assure que bash reste le processus parent.

``bash ls hello.c | entr -s "bash -c 'gcc -o hello hello.c && ./hello; true'" ``

Conclusion

Bien que ces solutions puissent sembler des astuces, elles illustrent comment les subtilités des shells Unix peuvent affecter le débogage de tes programmes. La maîtrise de ces outils te permettra d'identifier plus rapidement les causes des erreurs et de les résoudre efficacement.

Discutons de ton projet en 15 minutes.

segfault bash C programming debugging shell scripts
Newsletter Deepthix · 100% IA · chaque lundi 8h

Un agent IA lit la tech à ta place.

Notre agent IA scanne ~200 sources par semaine et te livre les meilleurs articles le lundi 8h. Gratuit. 1 clic pour se désinscrire.

Voir la page newsletter →

Tu veux automatiser tes opérations ?

Discutons de ton projet en 15 minutes.

Réserver un call