为默认构造函数添加断点

Add break point to default constructor

我有一个 class,它本身就有一个默认构造函数。

public class OneRollingFileAppender : RollingFileAppender
{
    #region RollingFileAppender Overrides

    protected override void Append(LoggingEvent loggingEvent)
    {

        GlobalFactory<ILoggingEventParameterManager>.Instance.Apply(loggingEvent);
        base.Append(loggingEvent);
    }

    #endregion
}

在不编辑代码的情况下,例如添加新构造函数或属性,我如何断点默认构造函数?

注意:应该有一种技术可以在IL或内存中找到代码,然后我想在那里设置一个断点。

我相信您正在使用 log4net。由于您没有源代码,因此您不能在构造函数上放置断点。

如果您创建一个变量并在您的 class 中分配一个值,您可以在那里放置一个断点,当 class 的一个实例被创建时该断点将被触发。

public class OneRollingFileAppender : RollingFileAppender
{
  int foo = 0; //Place break point here
}

您不能在您无法控制的已编译代码中放置断点。但是,使用 ReSharper 之类的东西,您可以进入第三方代码。参见:https://www.jetbrains.com/help/resharper/Debugging_Without_Source_Code.html

使用 WinDbg + SOS 扩展

  1. 使用 Windbg 附加到进程(File/Attach 处理)

  2. 加载 sos (.loadby sos mscorwks)

  3. 设置断点( !bpmd mylib.dll Namespace.ClassName..ctor )

如果您只想知道 class 何时创建,您可以在 Visual Studio 中使用函数断点。 Debug -> New Breakpoint

作为函数名称,您输入 class 名称。