【发布时间】:2015-04-23 13:11:32
【问题描述】:
我正在尝试使用开源库中的函数。这个函数默认不暴露在外面(所以我假设它不是开源库直接提供的实用函数),但是我需要这个函数来解决我的代码中的一些问题,所以我在makefile中做了一些改变来暴露图书馆的功能。
现在的问题是如何确保这个函数是可重入的。
我无法用肉眼发现,因为它在内部调用了许多函数。
确切地说,我很想知道 GDB 中是否有任何可用的工具或任何选项来检查我的函数是否仅使用局部变量而不更改全局变量。
【问题讨论】:
-
如果不确定并且您可以修改(看起来可以),请使用一些静态互斥体使函数不可重入。
-
可以查看反汇编代码。不过,这可能不值得付出努力……
-
你可以只调用函数,调用中断,然后再次调用函数,看看会发生什么。如果它表现不好。
-
@Mohit Jain:我无法修改函数。这个函数被许多其他函数调用,并且似乎他们在调用这个函数之前就获得了锁(并不意味着'他们在调用这个函数之前正在锁定,他们可能会为其他一些用例获得锁)。
-
这非常棘手,因为除此之外,甚至标准 IO 函数也是不可重入的。有 valgrind 插件和其他工具,但它们不能 100% 保证代码是可重入的。