Durante a compilação da maioria dos pacotes de software (se não todos), a saída em stdout e stderr é criada por vários processos individuais e os arquivos processados / alterados / criados no decorrer de uma compilação são manipulados por vários processos diferentes, como bem. Isso ocorre porque os sistemas de compilação dos pacotes de software (provavelmente a maioria) dependem de vários softwares diferentes para produzir o resultado final da compilação.
Seria muito útil se um processo de compilação no Linux (ou um BSD) pudesse ser rastreado de forma transparente, de modo que se pudesse recuperar as seguintes informações:
Esta informação seria útil para:
A alternativa para fazer esse rastreamento da execução do programa seria modificar cada programa que produz ou altera arquivos e fazer com que todos tenham um formato de saída legível por máquina unificada. Dados quantos programas estão envolvidos na compilação de software (compiladores para diferentes linguagens, geradores de documentação, conversores de imagens ou até mesmo comandos Unix como sed, grep, cp ou mv) isso é inviável.
O Linux fornece algumas maneiras de rastrear todas as chamadas do sistema feitas por um processo e por todos os seus filhos. Mas os mecanismos baseados em ptrace ou LD_PRELOAD influenciam algumas construções de maneira que elas falharão ou produzirão resultados diferentes em comparação com quando não forem rastreadas por nenhum dos métodos. E o systemtap, muitas vezes, ignora os probes, pois é apenas escutar passivamente e não retardar um processo se os eventos ocorrerem muito rápido.
Então, o que eu estou procurando é uma forma de rastrear com confiança as chamadas do sistema feitas por um processo e todos os seus filhos de uma maneira completamente transparente (exceto que isso provavelmente influenciará o tempo de execução) para o processo e todas as suas crianças.
Isso é possível no Linux (ou BSD)? Se sim, como?
Tags tracing