3

我有一个调用外部 .dll 的 Windows 应用程序。过了一会儿,我注意到了与用户编组有关的致命错误。网上有一个消息来源,由于该特定错误,我将目标更改为 x86 而不是 AnyCPU。我这样做了,现在每当我让应用程序运行时,它都会退出调试模式并使应用程序崩溃。但是,如果我在 .dll 调用之后立即设置断点,并跳过每一行,直到我再次获得对应用程序的控制权,它就不会崩溃。有什么具体的原因可能导致这种情况吗?有人调试过这个问题吗?

谢谢!

4

3 回答 3

1

解决问题的步进代码通常是原始代码中时序问题的症状。如果外部资源异步加载,它不会出现在调试器中当前线程的堆栈上,但可以被调用。跳过代码会导致流程延迟。

于 2012-08-14T21:26:41.830 回答
0

谢谢大家的建议!幸运的是,我最终让它工作(对它为什么工作的了解很少),但将构建目标更改为专门的 x86 机器而不是“AnyCPU”。这是一个网站建议的,现在找不到了:\ 希望这对其他人有所帮助,而不是遇到类似的问题!

于 2012-08-16T18:40:37.730 回答
0

我认为这类事情的最常见原因是未初始化的变量。它们拾取内存中的任何内容,并且调试器的存在可以轻松更改堆栈中未使用部分中的内容——当调用下一个例程时,该内存将成为局部变量。检查 DLL 代码。

请注意,您的“修复”让我更加怀疑这是真正的答案。

(然后还有一个非常疯狂的调试器问题的案例。很久以前,我遇到了一个案例,即如果您单步执行,调试器将无效值加载到段寄存器中没有问题。)

于 2012-08-16T20:38:09.010 回答