[gull] truc et astuce: strace pour chercher l'erreur

Félix Hauri felix at f-hauri.ch
Sat May 7 14:05:02 CEST 2005


Salut la liste,

Pour commencer, un petit script qui utilise les commandes ``dialog'', ``whiptail''
ou ``gdialog'' pour afficher une barre de progression:
$ env DIALOG=gdialog gauge.pl kernel-source-2.0.12.tar.b2 | tar -jxC destdir/
vous pourrer le trouver à http://f-hauri.ch/vrac/gauge-pl.txt

Voici un petit truc tout con, lorsqu'un programme ne fait pas ce que l'on 
voudrait alors que sous une autre config ou utilisateur, le même programme 
fonctionne differement (mieux;):

$ strace 2>&1 leprogrammeencause args | grep ^open.*$USER

...
Pour savoir si un programme lancé antérieurement tourne ou est ``planté''

$ strace 2>&1 -p $(ps -C leprogrammeencause o pid=) | grep '^\(read\|write\)'

ou
$ prgpid=$(ps -C leprogrammeencause o pid=)
$ strace 2>&1 -p $prgpid | grep '^\(read\|write\)'
...
Enfin, pour avoir une idée de son débit,
(j'utilise perl, c't'un poil plus long;)
$ perl -e '
    my $pid=$ARGV[0];
    open FH,"strace 2>&1 -p $pid |" or die;
    my ($first,%tot)=(time(),{ read => 0 , write => 0 });
    while (<FH>) {
        /(read|write).* = (\d+)$/ && do { 
            $tot{$1}=$tot{$1}+$2;
            my $etim=time()-$first;
            syswrite ( STDOUT,
                sprintf "\rR:%12d W:%12d %8d -> r:%11.2fK/s w:%11.2fK/s",
                    $tot{read}, $tot{write}, $etim,
                    $tot{read}/$etim/1024, $tot{write}/$etim/1024 ) 
                if $etim > 0;
            }
        }; ' $prgpid


-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch



More information about the gull mailing list