20100705

Judiciously placed print statements

A trabalhar numa arquitetura na qual o gdb não está sendo muito amigável [1] e por conta de preguiça, precisei saber todas as funções que eram chamadas diretamente num determinado programa escrito em C (linux/gcc).
Para tal desenrolei em rc(1) usando sed(1) do Plan 9 from User Space:
for(i in *.c) {
 sed 's/^{$/{\nprint("%s >>>\\n", __FUNCTION__);/g;' $i > $i.new
 mv $i.new $i
}

Por ser uma rotina ingênua alguns erros surgiram em declarações de structs e enums, mas comparado ao benefício, me parece valer a pena.

[1] Bibliotecas dinâmicas + gdb para mips rodando em 386 = .dynamic section for "/lib/libm.so.6" is not at the expected address (wrong library or version mismatch?)

ps: O título é uma alusão à "The most effective debugging tool is still careful thought, coupled with judiciously placed print statements." de Brian Kernighan.

Nenhum comentário:

Postar um comentário