gccでコールスタックの深さを取得する

user7893856

LINEFILEfuncなどを出力するデバッグ印刷関数を書きたいですひねりは、コールスタックの深さに応じてプリントアウトを自動的にインデントしたいということです。

main.c:55:main()
   functions.c:33:function1()
   functions.c:133:function2()
      functions.c:33:function1()
      functions.c:33:function1()

function1がすぐに戻り、function2がfunction1を2回呼び出す場合。

これは、関数が呼び出されるたびに手動でインクリメントされ、返されるたびにデクリメントされるグローバル変数を使用して実行できると思いますが、これにはコードベースのかなりのリホールが必要になります。もっと簡単な方法があるのだろうかと思っていました。

それが標準のGNUである限り、ソリューションが非標準のCであるかどうかは気にしません。

ジェロエン3

おそらく、Gccのコードプロファイリングオプションを使用してこれを行うことができます。https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Code-Gen-Options.html

-finstrument-functions関数
への入り口と出口のインストルメンテーション呼び出しを生成します。関数の入力直後と関数の終了直前に、現在の関数のアドレスとその呼び出しサイトを使用して、次のプロファイリング関数が呼び出されます。(一部のプラットフォームでは、__ builtin_return_addressは現在の関数を超えて機能しないため、コールサイト情報をプロファイリング関数で使用できない場合があります。)

void __cyg_profile_func_enter (void *this_fn,
                               void *call_site);
void __cyg_profile_func_exit  (void *this_fn,
                               void *call_site);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コールスタックの深さ

分類Dev

Rustはコールスタックの深さを公開しますか?

分類Dev

任意の深さで深くネストされたハッシュテーブルから値を取得するにはどうすればよいですか?

分類Dev

ネストされたJsonオブジェクトの奥深くでデータを取得する

分類Dev

深いネストされたコールバックを回避する方法は?

分類Dev

レコードを削除するときのSystemStackError(スタックレベルが深すぎる)

分類Dev

Scrapyで各クローラーの深さを取得する方法

分類Dev

org-agendaクロックテーブルの深さをカスタマイズする方法は?

分類Dev

TGridPanelでクリックされたコントロールの列インデックスを取得する

分類Dev

インデックス540エラーでTradingViewの深さを修正する方法

分類Dev

Rails4のスタックレベルが深すぎるafter_saveコールバック

分類Dev

Chromeコンソール警告のスタックトレースを取得することは可能ですか?

分類Dev

Spyder IPythonコンソールでsympyからラテックススタイルの出力を取得するには?

分類Dev

スレッドスタックの深さを測定するにはどうすればよいですか?

分類Dev

再帰を使用する深さ優先トラバーサルコードをスタックを使用するコードに変換するにはどうすればよいですか?

分類Dev

スタックの高さ/再帰の深さを確実に追跡することは可能ですか?

分類Dev

Swiftで深くネストされたFirebaseデータを取得する

分類Dev

jqueryの内部セレクターコールバック関数内で現在の親セレクターのインスタンスを取得する方法

分類Dev

再帰の深さを増やすとスタックオーバーフローエラーが発生するのはなぜですか?

分類Dev

ディレクトリツリーでファイルの深さを取得する

分類Dev

GCCで生成されたコードがスタックからジャンクを読み取るのはなぜですか?

分類Dev

バージョン2.5.5-p157でのみRubyがスタックレベルの深すぎるエラーをスローする

分類Dev

constコンストラクターをdartにネストするのにどれくらいの深さが必要ですか?

分類Dev

Cでスタックの深さを決定できますか?

分類Dev

C#-コンボボックスで複数のデータを取得する

分類Dev

コントロールのクラス定義でカスタムコントロールが追加されるシーンのサイズを取得します

分類Dev

深い反復の最初の真の結果でコールバック関数を停止する方法

分類Dev

特定のコミットを深さ1で浅くクローンする方法は?

分類Dev

バイトコードで使用するJavassistを使用して、クラスで宣言されたフィールドのインデックスを取得します

Related 関連記事

  1. 1

    コールスタックの深さ

  2. 2

    Rustはコールスタックの深さを公開しますか?

  3. 3

    任意の深さで深くネストされたハッシュテーブルから値を取得するにはどうすればよいですか?

  4. 4

    ネストされたJsonオブジェクトの奥深くでデータを取得する

  5. 5

    深いネストされたコールバックを回避する方法は?

  6. 6

    レコードを削除するときのSystemStackError(スタックレベルが深すぎる)

  7. 7

    Scrapyで各クローラーの深さを取得する方法

  8. 8

    org-agendaクロックテーブルの深さをカスタマイズする方法は?

  9. 9

    TGridPanelでクリックされたコントロールの列インデックスを取得する

  10. 10

    インデックス540エラーでTradingViewの深さを修正する方法

  11. 11

    Rails4のスタックレベルが深すぎるafter_saveコールバック

  12. 12

    Chromeコンソール警告のスタックトレースを取得することは可能ですか?

  13. 13

    Spyder IPythonコンソールでsympyからラテックススタイルの出力を取得するには?

  14. 14

    スレッドスタックの深さを測定するにはどうすればよいですか?

  15. 15

    再帰を使用する深さ優先トラバーサルコードをスタックを使用するコードに変換するにはどうすればよいですか?

  16. 16

    スタックの高さ/再帰の深さを確実に追跡することは可能ですか?

  17. 17

    Swiftで深くネストされたFirebaseデータを取得する

  18. 18

    jqueryの内部セレクターコールバック関数内で現在の親セレクターのインスタンスを取得する方法

  19. 19

    再帰の深さを増やすとスタックオーバーフローエラーが発生するのはなぜですか?

  20. 20

    ディレクトリツリーでファイルの深さを取得する

  21. 21

    GCCで生成されたコードがスタックからジャンクを読み取るのはなぜですか?

  22. 22

    バージョン2.5.5-p157でのみRubyがスタックレベルの深すぎるエラーをスローする

  23. 23

    constコンストラクターをdartにネストするのにどれくらいの深さが必要ですか?

  24. 24

    Cでスタックの深さを決定できますか?

  25. 25

    C#-コンボボックスで複数のデータを取得する

  26. 26

    コントロールのクラス定義でカスタムコントロールが追加されるシーンのサイズを取得します

  27. 27

    深い反復の最初の真の結果でコールバック関数を停止する方法

  28. 28

    特定のコミットを深さ1で浅くクローンする方法は?

  29. 29

    バイトコードで使用するJavassistを使用して、クラスで宣言されたフィールドのインデックスを取得します

ホットタグ

アーカイブ