每天至少 4 次我需要重新启动 Delphi 以使调试器再次在断点处停止。有时我可以通过在重建代码后附加到进程来欺骗它再次工作。但大多数时候我做不到,这让我花费了大量时间返回并重新打开我想要的所有文件。
几乎每次发生这种情况时,我在尝试关闭 Delphi 时都会遇到某种致命错误。有什么解决办法吗?我有“最新”的 Delphi 7,在 WinXP 上运行,内存充足。我办公室的大多数其他人也遇到了这个问题。
Our experience with Delphi 7 is similar to yours: Fairly constant crashes within the IDE, with abstract errors, invalid pointer references, and exceptions in the VCL library.
It seems to depend on the complexity of the project you have loaded: Our main project is a 200,000+ line program with multiple MDI forms and third-party libraries. Virtually whenever we'd exit Delphi we'd have to deal with catastrophic fatal errors. We got very adept at using the task manager to hunt down the Delphi32 process and kill it -- virtually the only way to get out sometimes.
We've since upgraded to Delphi 2009 and it has significantly better stability. My feeling is that Delphi 7 has numerous bugs, and you will either have to live with them, or upgrade.
调试时是正常退出程序,还是使用IDE强制调试停止/杀死应用程序?我发现使用 IDE 强制关闭应用程序会在一段时间后导致问题(通过重新启动 IDE 解决),而从应用程序内退出程序不会导致此类问题。
警告:我的经验是使用 Delphi 6。
好的,根据我之前对这个问题的回答,这是一个示例 DSK 文件。我不能将此作为对我的回复的评论,否则我会。:-)
他们真的没什么,他们很简单,浏览一下应该可以帮助你看到这一点。我实际上建议您只需加载 Delphi,打开“自动保存桌面”选项(它在环境或编辑器中,我忘了哪个),根据需要安排 IDE(打开各种源文件等),然后保存/关闭项目。您将在项目目录中找到一个 MyProject.dsk (etc) 文件 - 只需将其设为只读(或按照您在评论中链接到的文章中的建议,并在您可以随时携带的地方制作它的备份副本需要时回来)。
无论如何,这里有一个示例 DSK,可以让您了解您正在玩什么。它们只是 INI 类型的文本文件,如果您愿意,可以在记事本中破解它们。:-)
[模块] Module0=C:\Projects\GUIPlay\src\du_FrameUtils.pas Module1=C:\Projects\GUIPlay\src\du_BaseDialogs.pas Module2=C:\Projects\GUIPlay\src\dm_DataMain.pas Module3=C:\Projects\GUIPlay\src\du_Main.pas 计数=4 EditWindowCount=1 [C:\Projects\GUIPlay\src\du_FrameUtils.pas] ModuleType=SourceModule 表单状态=1 窗体顶部=0 [C:\Projects\GUIPlay\src\du_BaseDialogs.pas] ModuleType=SourceModule 表单状态=1 窗体顶部=0 [C:\Projects\GUIPlay\src\dm_DataMain.pas] ModuleType=SourceModule 表单状态=1 FormOnTop=1 [C:\Projects\GUIPlay\src\du_Main.pas] ModuleType=SourceModule 表单状态=1 FormOnTop=1 [C:\Program Files\Borland\Delphi7\Projects\ProjectGroup1.bpg] 表单状态=0 窗体顶部=0 [C:\Projects\GUIPlay\src\GUIPlay.dpr] 表单状态=0 窗体顶部=0 [C:\Projects\GUIPlay\src\GUIPlay.todo] 表单状态=0 窗体顶部=0 [编辑窗口0] 观看次数=4 当前视图=2 查看0=0 视图1=1 视图2=2 视图3=3 CodeExplorer=CodeExplorer@EditWindow0 MessageView=MessageView@EditWindow0 创建=1 可见=1 状态=0 左=212 顶部=157 宽度=1127 身高=757 最大左=-1 最大顶部=-1 客户端宽度=1119 客户高度=723 左面板大小=140 LeftPanelClients=CodeExplorer@EditWindow0 LeftPanelData=0000040000000000000000000000000000000000000000000000100000000000000000C000000436F64654578706C6F726572FFFFFFFF RightPanelSize=0 底部面板大小=0 BottomPanelClients=MessageView@EditWindow0 底部面板数据=00000400010000000B0000004D6573736167655669657700000000000000000000000000000000000100000000000000000B0000004D6576957616FFFFFFFF5766 [查看0] 模块=C:\Projects\GUIPlay\src\du_FrameUtils.pas 光标X=1 光标Y=1 顶线=1 左列=1 [查看1] 模块=C:\Projects\GUIPlay\src\du_BaseDialogs.pas 光标X=1 光标Y=1 顶线=1 左列=1 [视图2] 模块=C:\Projects\GUIPlay\src\dm_DataMain.pas 光标X=1 光标Y=1 顶线=1 左列=1 [视图3] 模块=C:\Projects\GUIPlay\src\du_Main.pas 光标X=1 光标Y=1 顶线=1 左列=1 [手表] 计数=0 [断点] 计数=0 [地址断点] 计数=0 [主窗口] 创建=1 可见=1 状态=2 左=0 顶部=0 宽度=1571 身高=143 最大左=-1 最大顶部=-1 最大宽度=1579 最大高度=143 客户端宽度=1571 客户高度=109 [专案经理] 创建=1 可见=1 状态=0 左=1188 顶部=135 宽度=345 高度=762 最大左=-1 最大顶部=-1 客户端宽度=337 客户高度=736 待定高度=305 LRDockWidth=438 可停靠=1 [对齐调色板] 创建=1 可见=0 状态=0 左=200 顶部=144 宽度=156 高度=84 最大左=-1 最大顶部=-1 客户端宽度=150 客户高度=60 [物业检查员] 创建=1 可见=1 状态=0 左=3 顶部=147 宽度=272 身高=783 最大左=-1 最大顶部=-1 客户端宽度=264 客户高度=757 待定高度=783 LRDockWidth=272 可停靠=1 拆分位置=85 排列方式=名称 SelectedItem=名称 扩展项目= 隐藏类别= [对象树] 创建=1 可见=0 状态=0 左=0 顶部=142 宽度=190 高度=314 最大左=-1 最大顶部=-1 客户端宽度=182 客户高度=288 待定高度=314 LRDockWidth=190 可停靠=1 [CodeExplorer@EditWindow0] 创建=1 可见=1 状态=0 左=0 顶部=12 宽度=140 身高=711 最大左=-1 最大顶部=-1 客户端宽度=140 客户高度=711 待定高度=305 LRDockWidth=140 可停靠=1 [MessageView@EditWindow0] 创建=1 可见=0 状态=0 左=12 顶部=0 宽度=1107 高度=66 最大左=-1 最大顶部=-1 客户端宽度=1107 客户高度=66 待定高度=66 LRDockWidth=443 可停靠=1 [码头主机] DockHostCount=0
正如您所看到的,它实际上是要重新打开的文件列表,以及对窗口位置/大小和打开文件顺序的一些了解。
祝你好运!:-)
我在 D7 中也有过这种情况——但实际上只有一个特定的项目(诚然非常大,许多形式和自制的自定义组件)。其他项目(一些同样大)很好。
我的感觉是,它在某种程度上与使用从其他框架/表单子类化的框架和/或表单有关,您可以在 IDE/调试器中打开后代表单,而不是祖先表单。
因为,就像你一样,我觉得每天关闭并重新启动 IDE 六次是一种巨大的痛苦,所以我不厌其烦地为项目创建了一个 .DSK 文件,其中包含所有父表单的内容,因此当 Delphi 启动该项目时,它会“自动”打开所有其他表单。一旦我确定 DSK 的内容正确,我将 .DSK 文件设为只读...!
这意味着编辑器会“忘记”我当时打开了哪些文件,但至少它总是会自动打开所有似乎使 IDE“正常运行”的东西。如果我要在几天内处理特定的少数文件,我只需手动将它们添加到 .DSK 文件中。
我似乎记得 Delphi 会抱怨该文件是只读的,但这种方法消除了我们每天大约 80% 的痛苦。
然后我做的另一件事是让任务管理器加载,最小化,作为我系统启动的一部分。至少那时这是一个简单的 ALT-TAB 案例,可以找到可能杀死 IDE 的东西。:-)