1

每天至少 4 次我需要重新启动 Delphi 以使调试器再次在断点处停止。有时我可以通过在重建代码后附加到进程来欺骗它再次工作。但大多数时候我做不到,这让我花费了大量时间返回并重新打开我想要的所有文件。

几乎每次发生这种情况时,我在尝试关闭 Delphi 时都会遇到某种致命错误。有什么解决办法吗?我有“最新”的 Delphi 7,在 WinXP 上运行,内存充足。我办公室的大多数其他人也遇到了这个问题。

4

4 回答 4

3

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.

于 2009-01-21T23:37:02.050 回答
2

调试时是正常退出程序,还是使用IDE强制调试停止/杀死应用程序?我发现使用 IDE 强制关闭应用程序会在一段时间后导致问题(通过重新启动 IDE 解决),而从应用程序内退出程序不会导致此类问题。

警告:我的经验是使用 Delphi 6。

于 2009-01-21T22:41:05.113 回答
1

好的,根据我之前对这个问题的回答,这是一个示例 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

正如您所看到的,它实际上是要重新打开的文件列表,以及对窗口位置/大小和打开文件顺序的一些了解。

祝你好运!:-)

于 2009-01-30T09:59:34.100 回答
1

我在 D7 中也有过这种情况——但实际上只有一个特定的项目(诚然非常大,许多形式和自制的自定义组件)。其他项目(一些同样大)很好。

我的感觉是,它在某种程度上与使用从其他框架/表单子类化的框架和/或表单有关,您可以在 IDE/调试器中打开后代表单,而不是祖先表单。

因为,就像你一样,我觉得每天关闭并重新启动 IDE 六次是一种巨大的痛苦,所以我不厌其烦地为项目创建了一个 .DSK 文件,其中包含所有父表单的内容,因此当 Delphi 启动该项目时,它会“自动”打开所有其他表单。一旦我确定 DSK 的内容正确,我将 .DSK 文件设为只读...!

这意味着编辑器会“忘记”我当时打开了哪些文件,但至少它总是会自动打开所有似乎使 IDE“正常运行”的东西。如果我要在几天内处理特定的少数文件,我只需手动将它们添加到 .DSK 文件中。

我似乎记得 Delphi 会抱怨该文件是只读的,但这种方法消除了我们每天大约 80% 的痛苦。

然后我做的另一件事是让任务管理器加载,最小化,作为我系统启动的一部分。至少那时这是一个简单的 ALT-TAB 案例,可以找到可能杀死 IDE 的东西。:-)

于 2009-01-22T09:36:11.467 回答