问题描述
|
我正在用C建立一个共享库,其他程序会使用它。有时,这些其他程序由于共享库中的某些错误而崩溃。在重现这些类型的错误时,对我来说,了解我的库中的哪些函数,带有什么参数和以什么顺序被调用非常有用。当然,我可以向所有函数添加“ 0”调用,或者为所有函数添加断点,但是我认为必须有一种更好的方法来确定此点。
编辑:由于我在OSX上执行此操作,因此dtrace和相关脚本dapptrace似乎很有希望。但是,在浏览了一些文档之后,我仍然有些迷失。
说,我的库是/path/to/libmystuff.so,并且我有一个程序测试链接到该库。使用dtrace,我如何调出libmystuff.so中驻留的所有函数调用的列表?
解决方法
如果您在Linux系统上工作,则可以使用ѭ1来实现此目的。原始海报在下面的注释中显示了一种使用
dtrace
在Mac OS X上运行的解决方案。
,我假设您正在Unix上工作。
使用ѭ3进行调试。
如果您的程序崩溃了。
您可以使用生成的核心文件来查看堆栈跟踪。
它将提供您所要求的所有信息。
有关使用gdb和核心文件检查stacktrace的更多信息,请参见此处。
,您还可以使用所有详细信息(例如函数名称,参数等)将函数调用记录在文件系统上。
(通常,日志记录在Server-Clients应用程序中是有帮助的,但是我不确定您的应用程序是什么)。
这样,您可以跟踪所有呼叫。您还可以仅以调试模式启用日志记录。希望此回复对您有用。