如何查找函数是否可重入

Ban*_*ash 9 c c++ linux gdb

我正在尝试使用开源库中的函数.默认情况下这个函数没有暴露在外面(所以我假设它不是开源库直接提供的实用函数),但我需要这个函数来解决我的代码中的一些问题,所以不知何故我在makefile中做了一些更改来暴露来自图书馆的功能.

现在的问题是如何确保这个功能是可重入的.

我无法用肉眼发现,因为它在内部调用了许多功能.

确切地说,我很想知道是否有任何可用的工具或GDB中的任何选项来检查我的函数是否仅使用局部变量并且它不会更改全局变量.

Pet*_*ter 2

判断一个函数是否可重入的方法是分析它做了什么。

  1. 它不会访问全局变量,除非对这些全局变量的操作是原子的(例如,无法同时读取和修改全局变量)。这通常意味着避免使用全局变量,或保证对它们的同步访问 - 例如,修改和读取全局变量的所有代码在完成之前都持有互斥锁,因此操作是序列化的。

  2. 该代码不能自修改(幸运的是,自修改代码在标准 C 或 C++ 中相对较少)。

  3. 它不调用其他可重入的函数(其中包括标准库中的相当数量的函数)或程序(例如,多处理通常使确保可重入所需的控制复杂化)。

我不知道有任何特定工具可以分析函数以确定可重入性。通常,函数被设计为可重入(或不可重入)。在实践中,如果没有文档说明某个函数被设计为可重入的,那么可以合理地打赌它是不可重入的。