atexit()注册了多少个函数?

4
我们遇到一个问题,一个第三方库使用了 atexit() 函数注册一些函数。 有没有办法知道注册了多少个(或哪些)函数?
我查了一下这里,但是没有找到答案。
我尝试使用 sysconf 获取 ATEXIT_MAX,但结果是一个像 2^31-1 这样的巨大数字。
是否有任何方法使其正常工作呢?

1
让它工作是为了什么?这只是意味着这样做:你不能改变它或检查它。使用它的每个库都应该准确知道它在做什么,并且只使用它来进行无法通过其他方式实现的清理。 - Jens Gustedt
1个回答

2
你可以尝试偷偷地加入你自己的atexit()函数,有效地覆盖原始函数并在第三方软件的每次调用时进行协议处理。但这可能不是你想要的。

谢谢。这可以帮助我们定位问题。 - Zhongzhi
@Zhongzhi,你还没有解释“问题”是什么意思。 - Jens Gustedt
@JensGustedt 当程序使用状态码退出(exit()),父进程没有获取到该状态码。所以我猜测可能是某些第三方调用了atexit(),导致程序行为发生改变。 - Zhongzhi
你考虑过使用调试器逐步执行吗?可能涉及其他问题,掩盖了退出代码。我讨厌寻找幽灵... - Alfe
@Zhongzhi,这种情况实际上不应该发生。只有在这些“atexit”函数之一调用了“exit”甚至“_Exit”时才可能发生,但这将被认为是不好的风格。 - Jens Gustedt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接