最もスタックが必要なプログラムで最も深い呼び出しチェーンを見つける方法は?

最もスタックが必要なプログラムで最も深い呼び出しチェーンを見つける方法は?

より小さなスタックを持つプラットフォームでスタックオーバーフローが発生する傾向があるOCamlで書かれたプログラムがあります。

スタックオーバーフローを1つずつ見つけて解決するためにプログラムを進める代わりに、一般的な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を使用しています。

ベストアンサー1

おすすめ記事