C++ デバッグ アプリケーションの場合、コールスタック フレームの数を簡単にカウントできるようにしたいと考えています。これを行うOS機能はありますか?
これは、Windows と Posix、つまりクロス プラットフォームで必要です。いずれかまたは両方のプラットフォームに対するソリューションは素晴らしいでしょう。
スタックをたどってすべてのフレームを見つけることができますが、これを行うための簡単な呼び出しがあるかどうか疑問に思いました。
いいえ、これはコンパイラーのものだからです。
コンパイラーは、独自のABIを自由に定義できます。これは、コールスタック(存在する場合)の定義方法を定義します。純粋な「C」を使用していない限り、これは簡単ではなく、コンパイラごとに異なります。
また、MSが新しいスキームを使用していると聞きました(ただし、検証はしていません)。スタックフレームは、リターンジャンプに影響を与えるバッファオーバーフロー攻撃を防ぐ(より困難にする)ために、メモリの周囲にランダムに配置されます。正確には関連していませんが、楽しい事実です。
glibc (Linux) を使用している場合は、次の関数を使用してスタック トレースを取得できます。
#include <execinfo.h>
int backtrace(void **buffer, int size);
char **backtrace_symbols(void *const *buffer, int size);
void backtrace_symbols_fd(void *const *buffer, int size, int fd);
詳細については、backtrace の man ページを参照してください。