有什么办法可以追踪一个类,是何时实例化的呢?
从网上下了个源码,是一个酒店管理系统,
里面有一个数据库类。
但是我发现启动登录窗体后,这个数据库类就已经构造了。
因为我在类的构造函数中加了一个 messagebox.show,所以一启动登录窗体,这个类就实例化。但是我在这个窗体中找了半天,也没有找到是哪行代码实例化了这个类。我如何可以跟踪到呢?
从网上下了个源码,是一个酒店管理系统,
里面有一个数据库类。
但是我发现启动登录窗体后,这个数据库类就已经构造了。
因为我在类的构造函数中加了一个 messagebox.show,所以一启动登录窗体,这个类就实例化。但是我在这个窗体中找了半天,也没有找到是哪行代码实例化了这个类。我如何可以跟踪到呢?
构造函数中加了断点,到了断点后,看call stack就知道在哪里调用的了。
/// <summary>
/// 基础类库中用以检查调用者的辅助类
/// </summary>
/// <res>
/// 内部类
/// </res>
class stackTraceWalker
{
/// <summary>
/// 检查调用堆栈, 验证, 引发异常或者无操作
/// </summary>
/// <returns></returns>
/// <res>
/// 对于 ??? login, 可以检查是否包含客户端主程序集
/// 验证 public key token, 以及 type, method name
/// </res>
public static string assertCaller(ICallerContext ctx)
{
StackTrace st = new StackTrace();
StringBuilder sb = new StringBuilder();
sb.AppendLine("frame count: " + st.FrameCount);
StackFrame[] frames = st.GetFrames();
MethodBase mb = null;
string publicKeyToken = null;
AssemblyName an = null;
foreach (StackFrame frame in frames) {
mb = frame.GetMethod();
publicKeyToken = mb.Module.Assembly.FullName.Substring(mb.Module.Assembly.FullName.LastIndexOf("PublicKeyToken") + 15);
sb.AppendLine(publicKeyToken);
}
return sb.ToString();
}
} public class eca
{
public eca()
{
stackTraceWalker.assertCaller(null);
} /// <summary>
/// login
/// </summary>
public virtual void login()
{
stackTraceWalker.assertCaller(null);
}
}