가장 많은 스택이 필요한 프로그램에서 가장 깊은 호출 체인을 찾는 방법은 무엇입니까?

가장 많은 스택이 필요한 프로그램에서 가장 깊은 호출 체인을 찾는 방법은 무엇입니까?

더 작은 스택이 있는 플랫폼에서 스택 오버플로가 발생하는 경향이 있는 OCaml로 작성된 프로그램이 있습니다.

스택 오버플로를 하나씩 찾아서 해결하기 위해 프로그램을 진행하는 대신 ulimit일반적인 실행에서 가장 깊은(및/또는 가장 스택을 많이 사용하는) 호출 체인의 순서가 지정된 목록을 얻고 싶습니다.

perf를 사용하여 호출 그래프를 기록할 수 있습니다.

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

그런 다음 stackcollapse 스크립트를 사용하여 호출 체인을 가져옵니다.불꽃 그래프.

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

불행하게도 이 방법으로 얻은 호출 체인은 127개 항목으로 제한됩니다. perf report더 많은 항목을 표시하는 옵션이 있습니다: --max-stack n. 하지만 perf script비슷한 옵션은 없는 것 같습니다.

프로그램 실행을 기록하고 가장 깊은 호출 체인을 찾는 방법은 무엇입니까? 가장 많은 스택 공간을 사용하는 호출 체인은 어떻습니까(단순한 프레임 수보다는 프레임 크기를 고려하십시오)?

저는 커널 4.4.0-112-generic과 함께 Linux Mint 18.2를 사용하고 있습니다.

관련 정보