C/C++デバッグプリントプラクティス


TD;LR

#include <stdio.h>

printf("\\t%s:%dL %s() : some_variable=%d\\n",
  __FILE__, __LINE__, __func__, some_variable);

はじめに

そこそこ大規模なOSS(TensorFlowというディープラーニングフレームワーク)の動作解析に役立ったコードスニペットを紹介。特に、関数間の呼び出し順序を解析するときに役に立った。

説明

printf関数でソースコードのファイルパス、printf呼び出しの行数、printf呼び出し元の関数名を出力する。必要に応じて関数内に定義された変数も出力する。このコードスニペットで使っている事前定義識別子の説明は以下のとおり。

  • __FILE__
    • ソースコードのファイル名がフルパスで文字列として定義されている変数
  • __LINE__
    • ソースコード中の行数が数値として定義されている変数
  • __func__
    • 関数名が文字列として定義されている変数

使い方

呼び出し順序を解析したい関数の先頭に上記のコードスニペットを貼り付けて、ビルド、実行するだけ。