Možnost 1 by byla upravit zdrojový kód volající aplikace a vložit tee
do výstupního potrubí, abyste získali kopii výstupu pro kontrolu v této fázi.
Možnost 2 by byla napsat obalový skript kolem příslušného spustitelného souboru. Rychlý skript, který předá stdin a argumenty skutečné aplikaci, pak je výstupem na místo, které si můžete prohlédnout, a také jej vyplivne stejným způsobem, jakým by aplikace měla být jen pár řádků. Umístěte to na nějaké speciální místo a přidejte toto umístění na začátek proměnné PATH a poté spusťte aplikaci.
#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output
Mnoho informací o programu můžete získat jeho voláním pod strace
. To ukazuje každé systémové volání, které program provede, což může být někdy příliš mnoho informací, ale může být velkou pomocí při hledání toho, co se děje.
Prvním přístupem je spouštění vaší velké aplikace pod strace
. To pravděpodobně způsobí velké množství výstupu a zpomalí vaši aplikaci.
strace -s9999 -efile,process -f -o bigapp.strace bigapp
Pokud je velká aplikace interaktivní, můžete ji raději spustit a připojit k ní strace, jakmile budete připraveni spustit výpočty. Poznamenejte si ID procesu aplikace, řekněme 12345, a spusťte
strace -s9999 -efile,process -f -o bigapp-calculations.strace -p12345
Pokud stačí pozorovat tento externí spustitelný soubor, pak jak již navrhly jiné odpovědi, nahraďte tento spustitelný soubor obalovým skriptem. Můžete přesunout spustitelný soubor pod jiný název a umístit skript wrapper na jeho místo, nebo umístit skript wrapper před obvyklý spustitelný soubor v PATH
nebo nakonfigurujte aplikaci tak, aby volala váš obalový skript namísto obvyklého spustitelného souboru, ať už je to vhodné. Vytvořte skript obalu
#!/bin/sh
exec strace -s9999 -efile -o auxapp-$$.strace /path/to/original/executable "[email protected]"
Vysvětlení použitých strace parametrů:
-e
vybere systémová volání ke sledování. Systémová volání můžete zadat jménem nebo použít několik kategorií, jako jefile
(open
,close
,read
,write
, …) aprocess
(fork
,execve
, …).-f
způsobí, že strace sleduje rozvětvení, tj. trasovací podprocesy i původní proces.-o
vybere název souboru obsahujícího trasování.$$
je konstrukce shellu, která zastupuje ID procesu procesu shellu (kvůli použitíexec
v posledním skriptu obalu to bude také ID procesu pomocné aplikace).-s9999
umožňuje zobrazit tolik bajtů proread
awrite
a další hovory.
Spíše než měnit svou cestu byste měli přesunout binární soubor, který vás zajímá, z „binary“ do „binary.orig“ a poté jej nahradit skriptem. Řekl jste, že vás zajímají argumenty, takže je také budete chtít zapsat do souboru. Pravděpodobně vás bude také zajímat výstup příkazu „env“. Vypíše všechny aktuálně aktivní proměnné prostředí. Proměnné prostředí jsou často používány jedním programem k ovlivnění chování jiného programu, který volá.