C++ 偷看堆栈以获取呼叫者信息



是否有可能"窥视"堆栈,也许通过将地址映射到调试.map文件或其他东西来推断调用函数是什么?

我有一个从大量不同地方调用的函数,基本上如果可能的话,我希望能够以编程方式注销谁调用了该函数,以便我可以跟踪参数值随时间的变化,并能够将它们连接回它们可能出错的地方。我可以添加一个参数,以便调用方必须提供用户字符串或其他内容,但如果可能的话,我想做一些不那么侵入性的事情。

GCC具有此功能,例如__builtin_return_address(请参阅 http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html)。它们应仅用于调试或特殊测试目的,而不是作为生产代码的一部分。

您可以使用 Windows API 生成 MiniDump 文件,稍后在调试器中加载它们,如果符号可用,您应该能够调试崩溃并调查变量的值。

最新更新