是否有可靠的方法在Valgrind工具中获取包装函数的调用位置?

时间:2016-02-27 19:46:15

标签: c cross-platform valgrind instrumentation

我正在编写一个valgrind工具,它作为其工具的一部分,使用函数替换机制valgrind supplies替换某些函数调用。替换函数立即执行参数并使用客户端请求机制调用工具代码。问题是,一旦我在工具中,我想知道调用替换函数的位置,所以我可以使用它来准确地向用户报告结果。但我无法找到一种可靠的,跨平台的方式来做到这一点。到目前为止,我已经通过检测每个AbiHint将它的地址存储在工具内存中(如果它看起来在用户代码位置),然后在我们使用替换所调用的工具代码时拾取该地址功能。但是从我所读到的内容来看,我无法依赖这些跨平台的AbiHints,而且无论如何它似乎都是一个hacky,脆弱的解决方案。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

工具向用户报告错误,使用pub_tool_errormgr.h中可用的功能 这些将报告来宾堆栈跟踪,该跟踪应该给出位置 被替换的函数被调用。 如果需要,您还可以使用pub_tool_execontext.h中的函数直接获取访客堆栈跟踪。