如何生成被调用的方法的堆栈跟踪

时间:2014-01-09 17:40:29

标签: c# reflection

我调用另一个c#程序集的方法,它返回true或false。

现在我想知道方法本身是否调用另一个方法来生成返回值,或者只是返回true或false,因为它是硬编码的。

我已经通过查看IL代码解决了这个问题,但是我想知道是否有更通用的方法来通过stacktrace来做到这一点?

3 个答案:

答案 0 :(得分:1)

使用像DotPeek或JustDecompile这样的反编译器。

http://www.jetbrains.com/decompiler/

http://www.telerik.com/products/decompiler.aspx

不要在IL上浪费时间(除非你真的有很多时间)

答案 1 :(得分:1)

堆栈将显示指向当前行的调用,但不会显示完整的历史记录。换句话说,您只能看到在调用时方法是否被称为。从方法返回后,有关内部发生的事情的信息将丢失。

因此,如果您拥有可能会或可能不会被调用的此方法,或者它将触发的任何其他方法(例如通过事件订阅),您可以将StackFrame.GetFrame放入其中一个并查看它来自。否则,我认为唯一的方法是复制方法中的逻辑,以确定它是否会被调用。

答案 2 :(得分:0)

很抱歉这是不可能的,因为其他程序集可能只是你可能在项目中引用的.dll。

如果你有足够的时间,你可以尝试不道德的方式打破.dll,这将让你探索所有的源代码。