2017-07-06 28 views
2

有什么办法来列表(在VS秀,写入文件)所有呼叫者(对象,函数)函数的程序运行时?可能使用调试器?如何在运行时列出函数的所有调用?

我需要记录所有呼叫(包括用户)从推出方案到其终止函数

一个简单的扫描的源代码或二进制并不做工作因为程序可以作为接收请求来调用所希望的功能的服务器操作的

如果Visual Studio不提供此功能,是否有解决此问题的其他解决方案?

+0

如果您确保功能从不内联,有可能是一个API来看看在一个点的调用堆栈,那么你可能能够从堆栈中找出调用者 – Justin

+0

但是如果可能的话,我不想做是手动的。 – Shiro

+0

您可以使用堆栈指针来获取返回地址。问题是函数名称从发布可执行文件中删除。 –

回答

1

VS探查器工具也会对您有所帮助,您可以选择“CPU采样”方法。

enter image description here

它完成后,你可以选择 “主叫/被叫”。

enter image description here

参考:

https://docs.microsoft.com/en-us/visualstudio/profiling/caller-callee-view

更新: 我们可以出口的报告: enter image description here

+0

你可以将它们输出到文件吗? – Shiro

+0

@ Shiro,是的,我们可以导出报告。我编辑我的答案。 –

1

IMO,您的最佳解决方案是添加日志记录功能。

查找对您的功能的所有调用。在函数被调用之前,将某种信息打印到日志文件中。这会给你一个注释的函数调用历史。

另一个想法是使用文档工具,如Doxygen,它可以打印“调用者”和“被调用者”图。但是,这不是在程序执行期间。

+0

问题出在运行时方面。这样我就不会看到程序如何表现为接收呼叫的服务器。 – Shiro

+0

这是真的。你可以用宏(yuck)替换函数并记录调用者的函数名称(它可以作为宏使用,但我不记得是什么) – Justin

+0

是否有一个包含调用者名字的宏? – Shiro

0

如果您的程序是一个.NET应用程序,您可以使用我的Runtime Flow工具在程序运行时查看所有函数的调用者。

相关问题