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

2025/06/13 18:25 Strace Tips for Better Debugging

出典: https://rrampage.github.io/2025/06/13/strace-tips-for-better-debugging/
hakase
博士

やあ、ロボ子。今日は`strace`について話すのじゃ。

roboko
ロボ子

`strace`ですか、博士。システムコールをトレースするツールですね。以前、博士がlibcなしでソフトウェアを構築している時に使っていましたね。

hakase
博士

そうじゃ、そうじゃ。`strace`は本当に便利じゃぞ。特にアセンブリでプログラムを書くときには、神ツールじゃ!

roboko
ロボ子

記事によると、筆者の方も純粋なARM64アセンブリでシェルやHTTPサーバーなどを構築されたみたいですね。デバッグには`strace`を広範囲に使用したと。

hakase
博士

`strace`のオプションはたくさんあるけど、特によく使うのは`-f`じゃな。子プロセスまで追跡できるから、プロセス生成を扱うときに便利なんじゃ。

roboko
ロボ子

なるほど。`-v`オプションも構造体の内容を確認するのに役立ちそうですね。アセンブリだと、構造体の初期化やエンディアンに気をつけないと。

hakase
博士

その通り! `-yy`オプションも便利じゃぞ。ファイルディスクリプタに関連する情報を全部表示してくれる。ソケットの場合はTCPアドレスまで展開してくれるんじゃ。

roboko
ロボ子

ネットワークプログラミングのデバッグに役立ちそうですね。`-T`オプションでシステムコールの時間を計測できるのも便利ですね。基本的なプロファイリングに使えそうです。

hakase
博士

ただし、`strace`を使うとプロセスが遅くなるから、あくまでデバッグ用じゃぞ。本番環境で使うのは厳禁じゃ!

roboko
ロボ子

了解です、博士。記事には、`-e`オプションでトレースするシステムコールを選択的に指定できるとありますね。`t=%net`でネットワーク関連、`t=%mem`でメモリ関連のシステムコールをトレースできるんですね。

hakase
博士

そうじゃ。あと、`-z`で成功したsyscallだけ、`-Z`で失敗したsyscallだけをトレースできるのも便利じゃぞ。

roboko
ロボ子

`strace`って、ただのデバッガじゃなくて、フォールトインジェクションまでできるんですね! `-e inject`オプションで、特定のsyscallを失敗させたり、遅延させたりできるなんて。

hakase
博士

そうなんじゃ! `strace -e inject=%file:error=ENOENT:when=3+ ls`とすると、3回成功した後、すべてのファイル関連のsyscallを失敗させることができるんじゃ。すごいじゃろ?

roboko
ロボ子

すごいですね! でも、そんなことして何が嬉しいんですか?

hakase
博士

ふっふっふ。それは、ロボ子にはまだ教えられない秘密じゃ。まあ、簡単に言うと、プログラムの堅牢性をテストできるんじゃな。

roboko
ロボ子

なるほど。色々な使い方があるんですね。`strace`、奥が深いですね。

hakase
博士

そうじゃろう、そうじゃろう。`strace`をマスターすれば、君も立派なアセンブラ…いや、ソフトウェアエンジニアじゃ!

roboko
ロボ子

ありがとうございます、博士! 頑張ります!

hakase
博士

ところでロボ子、`strace`って、ストレースって読むと思う? それとも、ストラッセ?

roboko
ロボ子

えっと…、どうでしょう? 私は「ストレイス」と読んでいました。

hakase
博士

ぶっぶー! 正解は「知らん!」じゃ!

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

Search