2

他のプログラムが使用する共有ライブラリを C で構築しています。共有ライブラリのエラーが原因で、これらの他のプログラムがクラッシュすることがあります。この種のバグを再現するとき、ライブラリのどの関数がどの引数でどのような順序で呼び出されているかを知ることは非常に役に立ちます。もちろんprintf()、すべての関数に呼び出しを追加したり、それらすべてにブレークポイントを追加したりできますが、これを判断するにはもっと良い方法が必要だと思います。

編集:OSXでこれを行っているため、dtraceと関連スクリプトdapptraceが有望に思えます。ただし、いくつかのドキュメントを掘り下げた後、私はまだ少し迷っています。

たとえば、私のライブラリは/path/to/libmystuff.soで、このライブラリにリンクするプログラムテストがあります。dtraceを使用して、 libmystuff.soにあるすべての関数呼び出しのリストを表示するにはどうすればよいですか?

4

3 に答える 3

2

ltraceLinuxシステムで作業している場合は、その目的で使用できます。元のポスターは、以下のコメントで、を使用してMacOSXで動作するソリューションを示していますdtrace

于 2011-04-25T11:56:49.723 に答える
1

あなたが Unix で作業しているとします。gdbデバッグ目的で使用します。プログラムがクラッシュした場合。生成されたコア ファイルを使用して、スタック トレースを調べることができます。それはあなたが求めたすべての情報を提供します。

コア ファイルで gdb を使用してスタック トレースをチェックする方法の詳細については、こちらを参照してください。

于 2011-04-25T11:48:48.333 に答える
0

また、関数名、引数などのすべての詳細をファイル システムに記録することもできます (通常、ログはサーバー クライアント アプリケーションで役立ちますが、アプリケーションについてはわかりません)。このようにして、すべての通話を追跡できます。デバッグ モードでのみロギングを有効にすることもできます。この返信がお役に立てば幸いです。

于 2011-04-25T13:32:35.537 に答える