我有一个调用外部.dll的Windows应用程序。过了一会儿,我注意到了与用户编组有关的致命错误。网上有一个消息来源,我发现这个特定的错误是将我的目标改为x86而不是AnyCPU。我这样做了,现在每当我让应用程序运行时,它将退出调试模式并使应用程序崩溃。但是如果我在.dll调用之后立即设置一个断点,并逐步遍历每一行,直到我再次接收对应用程序的控制,它就不会崩溃。是否有任何具体可能导致这种情况?有人调试这个问题吗?
谢谢!
答案 0 :(得分:1)
解决问题的步进代码通常是原始代码中的计时问题的症状。如果外部资源异步加载,它将不会显示在调试器中当前线程的堆栈上,但是可以被调用。单步执行代码会导致流程延迟。
答案 1 :(得分:0)
谢谢大家的建议!幸运的是,我最终得到它的工作(对其工作原理的理解很少),但将构建目标更改为特定的x86机器而不是“AnyCPU”。这是由一个网站建议的,不能再找到:\希望这有助于其他人而不是遇到类似的问题!
答案 2 :(得分:0)
我认为这种事情最常见的原因是未初始化的变量。它们拾取内存中的任何内容,并且调试器的存在可以轻松地更改堆栈中未使用部分中的内容 - 在调用下一个例程时将成为局部变量的内存。检查DLL代码。
请注意,您的“修复”让我更加怀疑这是真正的答案。
(然后还有一个非常疯狂的调试器问题。很久以前我遇到了一个案例,如果你单步执行,调试器没有问题将无效值加载到段寄存器中。)