首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Delphi 2010 BSOD错误

Delphi 2010 BSOD错误
EN

Stack Overflow用户
提问于 2011-07-12 04:02:31
回答 2查看 704关注 0票数 4

我们将一个应用程序从Delphi 7移植到了Delphi 2010,在Windows XP下运行时,客户遇到了间歇性的BSOD (蓝屏死亡)错误。这些错误是非常零星的,很难追踪到。仅供参考:我们使用的是Delphi2010的内置内存管理器。

我们首先想到的是硬件问题,但是升级系统驱动程序并没有解决这个问题。

是否有人在使用Delphi 2010生成的应用程序时遇到过XP下的BSOD问题?如果是这样,您对我们如何纠正这个问题有什么建议吗?

感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 2011-07-12 04:23:38

在Delphi核心库中,没有任何东西可以直接导致BSOD。正如David指出的,Delphi程序在用户空间中运行。但是,如果它们将无效数据发送到内核空间驱动程序,那就是另一回事了。

你说D7-D2010更新,我想到的第一件事就是字符串的修改。Delphi的标准字符串类型已经从AnsiString (每个字符1个字节)更改为UnicodeString (每个字符2个字节),如果您将错误类型的字符串发送到某个驱动程序或系统例程,可能会导致奇怪的行为。

我要做的第一件事是运行一个完整的构建,并观察来自编译器的“隐式转换”警告。这意味着你混合了字符串类型。找到这些并修复它们,看看这是否有帮助。

此外,如果您有任何用于外部库的导入单元,并且它们使用接受字符串(或者更可能是PChar)参数的API,请确保将它们转换为PAnsiChar。Delphi已经为windows.pas中使用的Windows API解决了这个问题,但是如果你有自己的Windows API,你需要自己处理它。

票数 6
EN

Stack Overflow用户

发布于 2011-07-12 04:41:25

可以使用WinDbg或其他能够处理崩溃转储的工具来分析打开崩溃转储的BSOD。即使是一个“小转储”也会提供足够的信息来试图理解BSDO发生的地点和原因。WinDbg可以免费下载,并且您不需要在目标计算机上安装它,您可以要求客户将崩溃转储发送给您,并且您可以脱机分析它们。无论如何,从用户模式代码生成BSOD通常是非常困难的-但有一些方法可以使系统崩溃。BSOD显示哪种类型的错误?

更新:如果错误是PAGE_FAULT_IN_NONPAGED_AREA,这个链接解释了发生的事情:http://technet.microsoft.com/en-us/library/cc957625.aspx。这通常是一个与内存相关的问题,可能是D2010使用的内存比旧版本更多,最终可能会触发它。你能在那些机器上运行memtest (http://www.memtest.org/)吗?

Ntkrlnpa.exe不是驱动程序,而是包含操作系统执行程序和内核代码的映像(支持PAE的版本)。使用winDbg和崩溃转储可以获得导致崩溃的调用堆栈。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6655825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档