2

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

编辑:因为我在 OSX 上这样做,dtrace和相关的脚本dapptrace似乎很有希望。但是,在浏览了一些文档之后,我仍然有点迷茫。

比如说,我的库是/path/to/libmystuff.so并且我有一个链接到该库的程序测试。使用dtrace,我将如何显示驻留在libmystuff.so中的所有函数调用的列表?

4

3 回答 3

2

ltrace如果您在 Linux 系统上工作,则可以用于此目的。原始海报在下面的评论中展示了一个适用于 Mac OS X 的解决方案,使用dtrace.

于 2011-04-25T11:56:49.723 回答
1

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

有关使用带有核心文件的 gdb 检查堆栈跟踪的更多信息,请参见此处。

于 2011-04-25T11:48:48.333 回答
0

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

于 2011-04-25T13:32:35.537 回答