GNU/Linux >> Linux Esercitazione >  >> Linux

Strace/ptrace può causare il crash di un programma?

Così recentemente, stavo discutendo di strace con qualcuno e mi chiedevano cosa sarebbe successo se avessi tracciato un processo in esecuzione proprio mentre stava creando un socket di rete o qualcosa di simile. Ciò potrebbe causare l'arresto anomalo del programma in modi imprevisti?

Da quello che ho letto su ptrace, la syscall usata da strace, non dovrebbe essere in grado di causare nulla del genere se stai solo eseguendo il debug di un thread. Il processo viene interrotto ogni volta che viene chiamata una syscall, ma in seguito dovrebbe riprendere e non essere più saggio. I segnali vengono messi in coda mentre non è in esecuzione, quindi presumo che accada qualcosa di simile con syscalls/sockets/listen.

ptrace utilizzato nel contesto di strace può causare strani arresti anomali del processo?

Risposta accettata:

No , strace non dovrebbe causare un arresto anomalo del programma –

Tranne in questo caso alquanto insolito:

Se ha un bug che dipende dai tempi di esecuzione o percorsi di memoria di runtime .

Potrebbe innescare questo tipo di "heisenbug ” – ma estremamente raramente, perché questo tipo di bug è raro e deve attivarsi solo con strace o altra strumentazione.
E quando trovi un heisenbug, spesso è una buona cosa.

Riguardo a ptrace() – la syscall – questo è proprio ciò che strace fa dentro penso, quindi è simile. Si può fare solo più di strace can quando si utilizza ptrace() direttamente.

Il tuo esempio sarebbe proprio questo tipo di bug:

Nell'esempio, strace cambierebbe la tempistica dei passaggi per creare una connessione di rete. Se ciò causa un problema, si trattava di un "problema in attesa di verificarsi":i tempi di esecuzione cambiano costantemente. Con strace , solo un po 'di più. Ma qualsiasi altra applicazione avrebbe potuto modificare maggiormente i tempi, come avviare un programma.


Linux
  1. Programma Shell per aprire un driver di caratteri e aspettare?

  2. 7 Esempi di Strace per eseguire il debug dell'esecuzione di un programma in Linux

  3. Come posso ottenere ciò che la mia funzione principale ha restituito?

  4. programma lynx non riesce con "Impossibile accedere al file di avvio"?

  5. Come posso creare un file dump di un processo in esecuzione in Linux?

Come tracciare l'esecuzione del programma utilizzando il comando Strace di Linux

Cosa può causare un comando "Risorsa temporaneamente non disponibile" sul comando sock send()

Come posso avviare un programma come root usando il window manager?

Come può un file manager montare un'unità senza root?

Perché non posso mandare in crash il mio sistema con una fork bomb?

Cosa può causare un segnale 11?