方法执行顺序

时间:2013-01-01 03:13:22

标签: c# .net visual-studio-2010 debugging dll

A,B,C等课程很多。
在每一个中,都有一些方法:

class A {  
   void a1() { ...; }
   void a2() { ...; }
}
class B {  //dll
   void b1() { ...; }
   void b2() { ...; }
}
class C {  //dll
   void c1() { ...; }
   void c2() { ...; }
}

A类由我编码,B类和C类是导入的dll。

对于A类,我可以设置断点进行跟踪,但我不能使用B类和C类 我的程序将有数百个类,我想跟踪顺序是什么 调用每个类中的方法 即使有dll中定义的方法,是否可以输出这类信息?

实施例。 a1 - > b2 - > c1 - > a2

添加了:
特别是当dll方法调用另一个dll方法时 在这种情况下,包装器将没有多大帮助 任何人吗?

2 个答案:

答案 0 :(得分:2)

如果代码在没有源代码或调试符号的DLL中找到你,那么你的调试选项相当有限:你不能设置没有源的断点,除非你习惯于反汇编。

解决此问题的一种方法是将外部代码包装在您自己的类中,如下所示:

class CWrap {
    private readonly C wrapped = new C();
    public void c1() {
        log.Info("Entering c1");
        wrapped.c1();
        log.Info("Entering c1");
    }
    public void c2() {
        log.Info("Entering c2");
        wrapped.c2();
        log.Info("Exiting c2");
    }
}

答案 1 :(得分:0)

  1. Mutltithreading应用于方法,而不是类。

  2. 一旦启动线程,订单就是不确定的。 Thread order execution

    var a = new A();  
    var b = new B();  
    var c = new C();
    
    new Thread(a.a1).Start();
    new Thread(b.b1).Start();
    new Thread(c.c1).Start();
    

    a1,b1,c1没有明确的顺序。

  3. 如果您愿意,可以使用任务管理执行。

    Tasks.StartNew(()=> a.a1()).ContinueWith(_ => b.b1().ContinueWith(_=>c.c1); 
    

    它管道执行a1,b1和c1。

    它使用Tasks.ContinueWith

  4.   

    即使有dll中定义的方法,是否可以输出这类信息?

    是的,如果您指定debug build