2012-07-30 92 views
1

我已经为我的c#.net项目(使用“添加资源”)添加了托管C++ dll;它发现我试图实例化的类很好,没有编译器错误。但不知何故,我知道我实例化的字段获取空引用异常。所以我在设置字段的方法的顶部放置了一个断点......并且它从未被击中。如果我使用.dll中的类注释掉该行,则会触发该断点。取消注释,该方法即使被调用也不会执行。这里发生了什么事?当dll被调用时断点从来没有命中

该DLL是ManagedSpyLib,该类是ControlProxy,如果有帮助的话。这个调用是在一个背景工作者的DoWork方法中,这个方法肯定是异步开始的 - 整个线程是否会在没有提示调试器的情况下静静地崩溃?我怎样才能调试呢?

ETA:我在输出窗口或模块窗口中找不到有关dll的任何信息。一些谷歌搜索找到了一个修复:将目标更改为.net 3.5框架。但是我并没有接近理解WTF比以前更进一步 - 我的代码有效,但现在我不知道为什么,这更令人困惑。有人可以解释这种现象吗?

+0

调试行为与异常一致。是的,BGW的DoWork()方法中的例外被吞噬。不要忘记在RunWorkerCompleted事件处理程序中测试e.Error。或者使用Debug + Exception,Thrown复选框让调试器停止。 – 2012-07-30 19:01:32

+0

@HansPassant什么例外? – Yamikuronue 2012-07-30 19:31:22

+0

我不知道,你会从调试器告诉你的东西中得到更好的了解。否则您会抱怨NullReferenceExceptions。 – 2012-07-30 19:42:46

回答

3

用于调试未知错误/故障停在断点一般步骤:

请确保您有PDBS问题(调试 - >窗口 - >模块)加载DLL。确保源代码与您使用的版本相匹配。

在调试时检查输出窗口中是否有可疑的痕迹(尤其是关于例外情况)。

考虑打破所有异常(调试 - >异常 - >“引发”CLR异常)。可能需要禁用“仅限我的代码”(工具 - >选项 - >调试 - >我的代码),以打破所有例外。

+0

那么这导致我通过谷歌修复,但我更加困惑。查看问题编辑。 – Yamikuronue 2012-07-30 18:44:05

相关问题