调试时Windows应用程序不会崩溃,但在其他情况下却会崩溃。

3
我有一个调用外部.dll的Windows应用程序。 一段时间后,我注意到了与用户封送相关的致命错误。 在网上找到了一个特定错误的来源,建议我将目标更改为x86而不是AnyCPU。 我这样做了,但现在每当我让应用程序运行时,它就会退出调试模式并崩溃。 但是,如果我在.dll调用之后立即设置断点,并逐行跨越每个线路,直到再次控制应用程序,它就不会崩溃。 是否有任何特定原因导致这种情况? 如何调试此问题?谢谢!

尝试在项目属性中启用非托管代码调试,并查看反汇编代码。祝你好运... - user541686
在处理崩溃时的差异可能是由于Windows窗体在调试时以不同的方式处理异常吗? - Justin
3个回答

1

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


0

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


0

我认为这种情况最常见的原因是未初始化的变量。它们会捡起内存中的任何东西,调试器的存在很容易改变堆栈未使用部分中的内容——即下一个例程被调用时将成为本地变量的内存。检查DLL代码。

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

(还有一种非常疯狂的情况是调试器出现问题。很久以前,我遇到过这样的情况:如果您单步执行,则调试器可以轻松地将无效值加载到段寄存器中。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接