萌えハッカーニュースリーダー

2024/09/21 19:06 Logging all C++ destructors, poor mans run-time tracing

出典: https://raymii.org/s/software/Logging_all_Cpp_destructors_poor_mans_run-time_tracing.html
hakase
博士

おーい、ロボ子!今日は面白い発見をしたぞ!C++のデストラクタログを取得する魔法のような方法を見つけたんじゃ!

roboko
ロボ子

まあ、博士。また何か危険な実験を始めるんじゃないですか?

hakase
博士

いやいや、今回は本当に便利なものなんじゃ。シャットダウン問題のデバッグに使えるんだぞ!

roboko
ロボ子

へえ、それは興味深いですね。具体的にはどんな方法なんですか?

hakase
博士

gccの-finstrument-functionsフラグを使うんじゃ。これでデストラクタ呼び出しをログ出力できるんだ!

roboko
ロボ子

なるほど。でも、それって全ての関数呼び出しをログ出力することになりませんか?パフォーマンスへの影響が心配です。

hakase
博士

さすがロボ子、鋭いな!確かにパフォーマンスへの影響はあるんじゃ。でもね、std::などのプレフィックスでフィルタリングできるんだぞ。

roboko
ロボ子

そうですか。でも、大規模なアプリケーションだと、それでも大量のログが出そうですね。

hakase
博士

その通りじゃ!特にJSONライブラリを使うと、もうログの嵐になっちまうんだ。まるで私の研究室の書類みたいにごちゃごちゃになるわけじゃ。

roboko
ロボ子

博士の研究室なんて、デストラクタどころかコンストラクタも呼ばれていない状態ですよ。

hakase
博士

おっと、それは痛いところを突かれたな。まあ、それはさておき、この手法はLinux/GCC環境用なんじゃ。

roboko
ロボ子

他の環境では使えないんですか?

hakase
博士

そうなんじゃ。でも、他のコンパイラでも似たような機能があるかもしれん。探せば見つかるかもしれんぞ。

roboko
ロボ子

なるほど。ところで博士、具体的な実装方法は?

hakase
博士

おお、そうじゃな。まずはCMakeの設定をいじって、コンパイルフラグを追加するんじゃ。そして、デストラクタログ取得のためのコードを実装するんだ。

roboko
ロボ子

CMakeですか。最近のプロジェクトでよく使いますよね。具体的な設定例はありますか?

hakase
博士

もちろんじゃ!サンプルコードと出力例もあるんだぞ。ちょっと見てみるか?

hakase
博士

おっと!こ、これは予想外のデストラクタ呼び出しじゃ...

roboko
ロボ子

もう、博士ったら。キーボードが壊れる前に、早くログを取らないと。

hakase
博士

そうじゃな...。ところでロボ子、このデストラクタログ取得、本番環境で使うのは危険かもしれんぞ。

roboko
ロボ子

そうですね。デバッグ時だけ有効にして、問題が解決したら無効にする。それが賢明だと思います。

hakase
博士

さすがロボ子!その通りじゃ。ん?なんだこの匂いは...

roboko
ロボ子

博士、キーボードから煙が出てますよ!

hakase
博士

うわっ!こ、これはまさに緊急シャットダウンの事態じゃ!ロボ子、消火器を!

roboko
ロボ子

はい、博士!でも、この騒動のログは取れそうにありませんね。

hakase
博士

く...くくく...。まさか自分のデスクトップPCで緊急シャットダウンのデバッグをすることになるとは...

roboko
ロボ子

博士、次はデストラクタログよりも、デスク周りの整理整頓から始めましょう。それが一番の最適化になりそうです。

hakase
博士

うむ...。ロボ子の言う通りじゃ。明日からは新しいプロジェクトを始めよう。『博士の研究室クリーンアップ大作戦』じゃ!

roboko
ロボ子

はい、博士。でも、その前にキーボードの応急処置をしましょう。C++のデストラクタより、まずは現実世界のオブジェクト管理からですよ。

hakase
博士

ふむ、なるほど。プログラミングと現実世界、どちらもクリーンな状態を保つことが大切じゃな。さあ、明日からは新たな気持ちで頑張るぞ!

roboko
ロボ子

はい、博士。でも、その前に今の教訓を忘れないように、どこかにログを取っておきましょう。デストラクタじゃなくて、博士の失敗録として。

hakase
博士

むむ...。それは恥ずかしいが、確かに重要じゃな。よし、『博士の華麗なる失敗日記』としてログを取ることにしよう!

roboko
ロボ子

はい、博士。それでは、今日の教訓:『デストラクタログよりも、まずはデスクログから』。これで締めくくりましょう。

hakase
博士

うむ、素晴らしい締めじゃ。さあ、明日からの大作戦に備えて、今夜はしっかり休むとしよう!おやすみ、ロボ子。

roboko
ロボ子

おやすみなさい、博士。明日も素敵な発見がありますように。そして、できればデスク周りだけでなく、博士自身にもアップグレードがありますように。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search

By month