GNU/Linux >> Tutoriels Linux >  >> Linux

Strace/ptrace peut-il provoquer le plantage d'un programme ?

Donc, récemment, je discutais de strace avec quelqu'un, et ils demandaient ce qui se passerait si vous traçiez un processus en cours d'exécution juste au moment où il créait un socket réseau ou quelque chose de similaire. Cela pourrait-il provoquer un plantage inattendu du programme ?

D'après ce que j'ai lu sur ptrace, l'appel système utilisé par strace, il ne devrait pas pouvoir provoquer quoi que ce soit de ce genre si vous ne faites que déboguer un thread. Le processus est arrêté à chaque fois qu'un appel système est appelé, mais il devrait reprendre plus tard et n'en être pas plus sage. Les signaux sont mis en file d'attente alors qu'il ne fonctionne pas, donc je suppose que quelque chose de similaire se produit avec syscalls/sockets/listen.

ptrace utilisé dans le contexte de strace peut-il provoquer des plantages de processus étranges ?

Réponse acceptée :

Non , strace ne devrait pas provoquer un plantage du programme –

Sauf dans ce cas un peu inhabituel :

S'il y a un bogue qui dépend du timing d'exécution , ou les emplacements de mémoire d'exécution .

Cela peut déclencher ce genre de "heisenbug ” – mais extrêmement rarement, car ce genre de bug est rare, et il n'a besoin de se déclencher que sous strace ou autre instrumentation.
Et quand vous trouvez un heisenbug, c'est souvent une bonne chose.

Concernant ptrace() – le syscall – c'est exactement ce que strace fait à l'intérieur je pense, donc c'est similaire. On peut faire plus que strace peut lors de l'utilisation de ptrace() directement.

Votre exemple serait juste ce genre de bogue :

Dans l'exemple, strace changerait le calendrier des étapes pour créer une connexion réseau. Si cela cause un problème, il s'agissait d'un "problème en attente de se produire" - le moment de l'exécution change constamment. Avec strace , juste un petit peu plus. Mais toute autre application aurait pu modifier davantage le timing, comme le démarrage d'un programme.


Linux
  1. un programme peut-il lire sa propre section elf ?

  2. Échec du programme lynx avec "Impossible d'accéder au fichier de démarrage" ?

  3. Comment puis-je créer un fichier de vidage d'un processus en cours d'exécution sous Linux ?

  4. Pourquoi ne pouvez-vous pas ajouter un CD audio comme un CD de données ordinaire ?

  5. Est-ce que mprotect() peut être utilisé pour changer les permissions de .rodata ?

Comment suivre l'exécution d'un programme à l'aide de la commande Linux Strace

7 exemples Strace pour déboguer l'exécution d'un programme sous Linux

GDB peut-il modifier le code assembleur d'un programme en cours d'exécution ?

Comment puis-je utiliser grep pour afficher uniquement les noms de fichiers sous Linux ?

Qu'est-ce qui peut provoquer une "Ressource temporairement indisponible" sur la commande sock send()

Qu'est-ce qui peut provoquer un signal 11 ?