我正在Visual Studio 2012中创建一个DLL文件,该文件在专有程序中用作类库插件。
程序在启动时加载插件DLL,我可以通过专有程序中的时尚工作室访问它。
但是如果插件中的某个方法出于某种原因失败,我并不总是得到一个堆栈跟踪,而且我无法单步执行我的源文件。
我已将我的PDB文件放在同一目录中,但我相信环境的错误处理会接管,因此我收到错误,指出专有程序失败的位置,而不是我的插件失败的位置。
我无法创建测试存根,因为DLL依赖于专有程序中创建的实例。
如何以有效的方式调试我的DLL而不必在每隔一行上放置一条消息/日志语句?
答案 0 :(得分:2)
其实是的,真的很容易!您需要做的就是为AppDomain.FirstChanceException添加一个事件。抛出的任何异常,即使它们都在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);
}
}
答案 1 :(得分:1)
尝试将相关的.pdb文件放在.dll旁边,以便提供该信息。