如何反向跟踪函数调用

本文关键字:函数调用 跟踪 何反 | 更新日期: 2023-09-27 18:12:19

我想跟踪从一个特定函数开始到结束的函数调用流。

我知道在代码的任何地方都可以得到堆栈跟踪,然而,我不知道函数将采取哪条路径。我试图修复一个错误,我不知道在哪里感兴趣的点是确切的。这就是为什么我想看到函数调用的流程(不使用调试器,这是耗时的),这样我就可以缩小可能性。

是否可以反向跟踪开始函数调用?

如何反向跟踪函数调用

这叫做调用跟踪你可以在visual studio和第三方工具中看到这个,

https://msdn.microsoft.com/en-us/library/windows/hardware/hh439516 (v = vs.85) . aspx

您可以使用jetbrains工具作为第三方:

https://www.jetbrains.com/profiler/help/Call_Stack.html

https://www.jetbrains.com/resharper/documentation/help20/Navigation/stackTraceExplorer.html

希望这些对你有帮助

也许您可以使用System.Diagnostics.StackTrace类。MSDN

 var stackObject = new System.Diagnostics.StackTrace(true);
 string stackTrace = stackObject.ToString();

有两种方法,使用跟踪点-

  1. 每次跟踪一个函数;
  2. 跟踪所有函数

跟踪一个函数

将跟踪点放在感兴趣的函数中。每当跟踪点被击中时,让它打印调用函数。我认为这可以通过打印属性- $FUNCTION来完成。

这样,当你在Visual Studio的Output窗口中运行代码时,你将知道当前函数的调用者。现在在调用者函数中执行相同的活动,并根据需要继续使函数冒泡。


跟踪所有函数

如果您的所有函数都在一个类中或对您来说足够局部,只需在所有函数中放置相同的跟踪点。让您的代码运行,您将能够在Visual Studio的Output窗口中看到调用跟踪。


添加跟踪点

  1. 右键单击要添加跟踪点的行;
  2. 下拉菜单>断点>插入跟踪点;
  3. 打开的窗口将解释如何在该跟踪点打印调用函数。