[解決済み] CまたはC++でコールスタックを印刷する
質問
CまたはC++で実行中のプロセスで、ある関数が呼び出されるたびにコールスタックをダンプする方法はありますか? 私が考えているのは、以下のようなものです。
void foo()
{
print_stack_trace();
// foo's body
return
}
ここで
print_stack_trace
と同じような働きをします。
caller
をPerlで作成します。
あるいはこんな感じ。
int main (void)
{
// will print out debug info every time foo() is called
register_stack_trace_function(foo);
// etc...
}
ここで
register_stack_trace_function
を実行するたびにスタックトレースが出力されるような、ある種の内部ブレークポイントを設置します。
foo
が呼び出されます。
このようなものは、C言語の標準的なライブラリに存在するのでしょうか?
Linuxで、GCCを使っています。
背景
あるテスト実行で、本来は影響しないはずのコマンドラインスイッチによって、異なる動作をするものがあります。 私のコードには擬似乱数生成器があり、これらのスイッチに基づき異なる形で呼び出されていると推測されます。 私は、スイッチの各セットでテストを実行し、乱数ジェネレータがそれぞれ異なるように呼び出されるかどうかを確認できるようにしたい。
どのように解決するのですか?
linux だけで解決するには、次のようにします。
バックトレース(3)
の配列を返すだけです。
void *
(実際には、これらの各々は対応するスタックフレームからのリターンアドレスを指しています)。これらを実用的なものに変換するには、次のようにします。
バックトレースシンボル(3)
.
に注意してください。 backtrace(3) のノートセクション :
シンボル名は使用できない場合があります 特別なリンカーを使用しない限り オプションを使用します。 GNUリンカを使用しているシステムでは、GNUリンカのオプションである -ダイナミックリンカー オプションで指定します。 static"関数の名前は公開されないことに注意してください。 であり バックトレースで利用可能です。
関連
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] ディレクトリ構造をツリー形式で表示するLinuxコマンド
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】Cocoaでスタックトレースをコンソール/ログに出力するにはどうすればいいですか?
-
[解決済み】スタックフレームの概念をわかりやすく説明する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] PRETTY_FUNCTION__, __FUNCTION__, __func__の違いは何ですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] プログラムがクラッシュしたときにスタックトレースを自動的に生成する方法
-
[解決済み】C++で例外発生時にスタックトレースを表示する方法