なぜかおかしな振る舞いをするサーバプログラムをデバッグするというのは、それなりに骨の折れる作業です。大量のソースを前に「ここが怪しい」と言いながらデバッグログを埋め込むこともあるでしょう。また、lsof や ss といったコマンドやスタックトレースから見える状況を元に仮説を立てて検証していくこともあるでしょう。 リクエストを受け付けるとなぜか応答を返さないままになってしまう gRPC サーバに対し、ソースから解析をかけていったことがありました。そのときは目の前の対応で必死になってしまいましたが、本エントリでは「本来はどのようにデバッグを進めるべきだったのか」を考えます。 実験コード mutex の Unlock を忘れたサーバ 同時並行して AcquireLock を呼び出すクライアント trace trace の取得方法 サーバサイド trace の可視化 trace からのデバッグ g