列出对我的库的所有调用

时间:2011-04-25 11:43:49

标签: c debugging shared-libraries dtrace

我正在用C构建一个共享库,其他程序使用它。有时,由于我的共享库中存在一些错误,这些其他程序会崩溃。在重现这些错误时,对我来说,知道我的库的哪些函数被调用,有什么参数和顺序是非常有用的。当然,我可以为所有函数添加printf()次调用,或者为所有函数添加断点,但我认为必须有更好的方法来确定它。

编辑:因为我在OSX上执行此操作, dtrace 并且相关脚本 dapptrace 似乎很有希望。然而,在深入研究一些文档后,我仍然有点失落。

说,我的库是 /path/to/libmystuff.so ,我有一个程序 test ,它链接到这个库。使用 dtrace ,如何显示驻留在 libmystuff.so 中的所有函数调用的列表?

3 个答案:

答案 0 :(得分:2)

如果您在Linux系统上工作,可以使用ltrace。原始海报在下面的评论中显示了一个使用dtrace在Mac OS X上运行的解决方案。

答案 1 :(得分:1)

我假设您正在使用Unix。 使用gdb进行调试。 如果你的程序崩溃了。 您可以使用生成的核心文件来查看堆栈跟踪。 它将提供您所要求的所有信息。

有关使用带有核心文件的gdb检查堆栈跟踪的更多信息,请参阅here.

答案 2 :(得分:0)

您还可以使用函数名称,参数等所有详细信息记录文件系统上的函数调用。 (通常日志记录在Server-Clients应用程序中是有帮助的,但我不确定您的应用程序)。 这样您就可以跟踪所有呼叫。您也可以仅在调试模式下启用日志记录。我希望这个回复对你有用。