I have a program written in OCaml that tends to stack-overflow on platforms with small stacks.

Rather than ulimiting the program to find and solve stack overflows one by one, I'd like to get a sorted list of the deepest (and/or most stack-hungry) call chains in a typical execution.

I can record call graphs using perf:

perf record -F 99 --call-graph dwarf -- ./a.out input.txt

And then get call chains using the stackcollapse script in FlameGraph.

perf script > out.perf
FlameGraph/stackcollapse-perf.pl out.perf > out.folded

Unfortunately, the call chains obtained in that way are limited to 127 entries. perf report has an option to show more entries: --max-stack n. But perf script doesn't seem to have a similar option.

How can I record a program's execution, and find the deepest call chains? What about call chains using the most stack space (accounting for frame sizes rather than just frame count)?

I'm on Linux Mint 18.2, with kernel 4.4.0-112-generic.

  • Is DTrace available on your platform?
    – fpmurphy
    Apr 1, 2018 at 3:02
  • Apparently there's github.com/dtrace4linux/linux; I have never used it.
    – Clément
    Apr 1, 2018 at 3:07
  • It would help if you told us what Linux distribution and version you are using.
    – fpmurphy
    Apr 1, 2018 at 3:13
  • Other options might be SystemTap or ktap
    – fpmurphy
    Apr 1, 2018 at 3:16
  • @fpmurphy1, indeed, any of these would be fine by me.
    – Clément
    Apr 1, 2018 at 3:20


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.