Eu tenho um programa escrito em OCaml que tende a transbordar em plataformas com pequenas pilhas.
Em vez de ulimit
ing o programa para encontrar e resolver overflows de pilha um por um, eu gostaria de obter uma lista ordenada das cadeias de chamadas mais profundas (e / ou mais famintas por pilha) em uma execução típica. / p>
Eu posso gravar gráficos de chamadas usando o perf:
perf record -F 99 --call-graph dwarf -- ./a.out input.txt
E, em seguida, receba as cadeias de chamadas usando o script de colapso da pilha em FlameGraph .
perf script > out.perf
FlameGraph/stackcollapse-perf.pl out.perf > out.folded
Infelizmente, as cadeias de chamadas obtidas dessa maneira estão limitadas a 127 entradas. perf report
tem uma opção para mostrar mais entradas: --max-stack n
. Mas perf script
não parece ter uma opção semelhante.
Como posso gravar a execução de um programa e encontrar as cadeias de chamadas mais profundas? E quanto às cadeias de chamadas usando o maior espaço de pilha (respondendo por tamanhos de quadros em vez de apenas contagem de quadros)?
Estou no Linux Mint 18.2, com o kernel 4.4.0-112-genérico.