GNU/Linux >> Znalost Linux >  >> Linux

Může funkce Strace/ptrace způsobit selhání programu?

Nedávno jsem tedy s někým diskutoval o strace a ptali se, co by se stalo, kdybyste sledovali běžící proces právě při vytváření síťového soketu nebo něčeho podobného. Mohlo by to způsobit neočekávané selhání programu?

Z toho, co jsem četl o ptrace, syscall používaném strace, by nemělo být schopné způsobit nic takového, pokud právě ladíte vlákno. Proces se zastaví pokaždé, když je zavoláno systémové volání, ale měl by se později obnovit a být o nic moudřejší. Signály se zařazují do fronty, když neběží, takže předpokládám, že se něco podobného stane s syscalls/sockets/listen.

Může ptrace použitý v kontextu strace způsobit nějaké podivné pády procesu?

Přijatá odpověď:

Ne , strace by nemělo způsobit pád programu –

Kromě v tomto poněkud neobvyklém případě:

Pokud má chybu, která závisí na načasování provedení nebo umístění paměti za běhu .

Může to spustit tento druh „heisenbug “ – ale extrémně zřídka, protože tento druh chyby je vzácný a musí se spustit pouze pod strace nebo jiným zařízením.
A když najdete heisenbug, je to často dobrá věc.

Ohledně ptrace() – syscall – to je právě to, co strace myslím, že uvnitř, takže je to podobné. Člověk může udělat víc než jen strace můžete při použití ptrace() přímo.

Váš příklad by byl právě tento druh chyby:

V příkladu strace by změnilo načasování kroků k vytvoření síťového připojení. Pokud to způsobuje problém, byl to „problém čekající na to, až se stane“ – načasování provádění se neustále mění. S strace , jen trochu víc. Jakákoli jiná aplikace však mohla změnit načasování více, například spuštění programu.


Linux
  1. Jak mohu spustit program jako root pomocí správce oken?

  2. Selhání programu lynx s 'Can't access startfile'?

  3. Jak mohu vytvořit soubor výpisu běžícího procesu v Linuxu?

  1. Jak může správce souborů připojit disk bez root?

  2. Proč nemohu rozbít svůj systém vidlicovou bombou?

  3. Co může způsobit signál 11?

  1. Program Shell stačí otevřít ovladač znaků a čekat?

  2. 7 Vzorové příklady pro ladění spouštění programu v Linuxu

  3. Může program zjistit, že je spuštěn pod sudo?