Você pode obter muitas informações sobre um programa chamando-o em strace
. Isso mostra todas as chamadas do sistema que o programa faz, o que pode ser muita informação às vezes, mas pode ser uma grande ajuda para descobrir o que está errado.
A abordagem 1 é executar seu aplicativo grande em strace
. Isso provavelmente produzirá muitos resultados e atrasará seu aplicativo.
strace -s9999 -efile,process -f -o bigapp.strace bigapp
Se o aplicativo grande for interativo, talvez você prefira iniciá-lo e conecte o strace a ele quando estiver pronto para acionar os cálculos. Observe o ID do processo do aplicativo, digamos 12345, e execute
strace -s9999 -efile,process -f -o bigapp-calculations.strace -p12345
Se for o suficiente para observar esse executável externo, então,
outro answers já sugeriu, substitua esse executável por um script de wrapper. Você pode mover o executável para um nome diferente e colocar o script de wrapper em seu lugar, ou colocar o script de wrapper à frente do executável usual no PATH
, ou configurar o aplicativo para chamar seu script de wrapper em vez do executável comum, seja qual for é conveniente. Faça esse script de wrapper
#!/bin/sh
exec strace -s9999 -efile -o auxapp-$$.strace /path/to/original/executable "$@"
Explicação dos parâmetros de strace usados:
-
-e
seleciona as chamadas do sistema para rastreamento. Você pode especificar chamadas do sistema pelo nome ou usar algumas categorias, como file
( open
, close
, read
, write
,…) e process
( fork
, execve
,… ).
-
-f
faz strace seguir garfos , ou seja, rastrear subprocessos, bem como o processo original.
-
-o
seleciona o nome do arquivo que contém o rastreio. $$
é uma construção de shell que representa o ID do processo do shell (devido ao uso de exec
no último script de wrapper, que também será o ID do processo do aplicativo auxiliar).
-
-s9999
faz com que exiba muitos bytes para read
e write
e outras chamadas.