1

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。

使用 AI 类可以设置断点来跟踪,但我不能使用 B 类和 C 类。
我的程序将包含数百个类,我想跟踪每个类中调用的顺序方法。
即使在dll中定义了方法,是否可以输出这种信息?

前任。a1 -> b2 -> c1 -> a2

补充:
特别是当一个dll方法调用另一个dll方法时。
在这种情况下,包装器将无济于事。
任何人?

4

2 回答 2

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");
    }
}
于 2013-01-01T03:18:26.780 回答
0
  1. 多线程应用于方法,而不是类。

  2. 启动线程后,顺序是不确定的。线程顺序执行

    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 流水线执行。

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

    它通过管道执行 a1、b1 和 c1。

    它利用Tasks.ContinueWith

即使在dll中定义了方法,是否可以输出这种信息?

是的,如果您指定调试版本

于 2013-01-01T03:16:37.650 回答