GNU/Linux >> Znalost Linux >  >> Linux

Zachyťte vstup a výstup z konkrétního spustitelného souboru

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 je file (open , close , read , write , …) a process (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ů pro read a write 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á.


Linux
  1. Práce s Input Output a přesměrováním chyb v Linuxu

  2. Jak zachytit terminálové relace a výstup pomocí příkazu skriptu Linux

  3. Jak funguje vstup z klávesnice a textový výstup?

  1. Odebrání řídicích znaků (včetně kódů konzole / barev) z výstupu skriptu?

  2. Zachycovat vstup a výstup z konkrétního spustitelného souboru?

  3. Bash + Jak opustit sekundární skript a hlavní skript v obou případech?

  1. Jak mohu ftp a stáhnout soubory ze skriptu prostředí UNIX

  2. MYSQL se liší výstupem ze skriptu

  3. Jak extrahovat hodnotu (v konkrétním řádku a sloupci) ze souboru a přiřadit ji k nové proměnné