2

我正在 Visual Studio 2012 中创建一个 DLL 文件,该文件用作专有程序中的类库插件。

该程序在启动时加载插件 DLL,我可以在专有程序中的 Visual Studio 中访问它。

但是,如果插件中的某个方法由于某种原因失败,我并不总是得到堆栈跟踪,也无法单步执行我的源文件。

我已将我的 PDB 文件放在同一目录中,但我相信环境的错误处理会接管,所以我收到一个错误,指示专有程序在哪里失败,而不是我的插件在哪里失败。

我无法创建测试存根,因为 DLL 依赖于专有程序中创建的实例。

我怎样才能以一种有效的方式调试我的 DLL,而不必在每隔一行放置一条消息/日志语句?

4

2 回答 2

2

其实是的,真的很简单!您需要做的就是为AppDomain.FirstChanceException添加一个事件。任何抛出的 execption,即使它们在 try-catch 块中,也会传递给这个事件。

public class MyPlugin : IPlugin
{
    static MyPlugin()
    {
        AppDomain.CurrentDomain.FirstChanceException += FirstChanceHandler;
    }

    static void FirstChanceHandler(object source, FirstChanceExceptionEventArgs e)
    {
        MyErrorLogger.WriteLine("FirstChanceException event raised in {0}: {1}",
            AppDomain.CurrentDomain.FriendlyName, e.Exception.Message);
    }
}
于 2013-07-23T06:34:00.237 回答
1

尝试将相关的 .pdb 文件放在 .dll 旁边,这样可以使该信息可用。

于 2013-07-23T05:36:06.600 回答