Почему мне нужно перезапустить Delphi 7, чтобы заставить работать отладчик иногда - PullRequest
1 голос
/ 22 января 2009

Как минимум 4 раза в день мне нужно перезапустить Delphi, чтобы отладчик снова остановился на точках останова. Иногда я могу заставить его работать снова, подключившись к процессу после перестройки кода. Но большую часть времени я не могу, и это стоит мне много времени, чтобы вернуться и заново открыть все файлы, которые я хочу.

Почти каждый раз, когда это происходит, я получаю какую-то фатальную ошибку при попытке закрыть Delphi. Есть ли какое-то решение для этого? У меня есть «последняя» Delphi 7, работающая на WinXP с большим объемом памяти. Большинство других парней в моем офисе тоже сталкиваются с этой проблемой.

Ответы [ 4 ]

3 голосов
/ 22 января 2009

Наш опыт работы с Delphi 7 похож на ваш: довольно постоянные сбои в среде IDE с абстрактными ошибками, недействительными ссылками на указатели и исключениями в библиотеке VCL.

Похоже, это зависит от сложности загруженного вами проекта: наш основной проект - это 200 000 строк программы с несколькими формами MDI и сторонними библиотеками. Практически всякий раз, когда мы выходили из Delphi, нам приходилось иметь дело с катастрофическими фатальными ошибками. Мы очень хорошо разбирались в том, как использовать диспетчер задач, чтобы выследить процесс Delphi32 и убить его - практически единственный выход из ситуации.

С тех пор мы обновились до Delphi 2009, и его стабильность значительно улучшилась. У меня такое ощущение, что в Delphi 7 есть множество ошибок, и вам придется либо с ними жить, либо обновляться.

2 голосов
/ 22 января 2009

Во время отладки вы обычно выходите из программы или используете IDE для принудительной отладки, чтобы остановить / убить приложение? Я обнаружил, что использование IDE для принудительного закрытия приложения через некоторое время вызывает проблемы (решаемые путем перезапуска IDE), а выход из программы из приложения не вызывает таких проблем.

Предостережение: мой опыт работы с Delphi 6.

1 голос
/ 30 января 2009

Хорошо, следуя моему предыдущему ответу на этот вопрос, вот пример файла DSK. Я не могу опубликовать это в качестве комментария к моему ответу, в противном случае я бы. : -)

В них нет ничего особенного, они довольно просты, и взгляд через это должен помочь вам увидеть это. На самом деле я бы посоветовал вам просто загрузить Delphi, включить опцию «автосохранение рабочего стола» (это в среде или редакторе, я забыл, что), расположить IDE так, как вы этого хотите (с открытыми исходными файлами и т. Д.), затем сохраните / закройте проект. Вы найдете файл MyProject.dsk (и т. Д.) В каталоге проекта - просто сделайте его доступным только для чтения (или следуйте советам в статье, на которую вы ссылаетесь в комментариях, и сделайте резервную копию его где-нибудь, что вы всегда сможете принести) обратно всякий раз, когда вам нужно).

В любом случае, вот пример DSK, чтобы дать вам представление о том, с чем вы играете. Это просто текстовые файлы типа INI, вы можете взломать их в Блокноте, если хотите. : -)

[Modules]
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
Count=4
EditWindowCount=1

[C:\Projects\GUIPlay\src\du_FrameUtils.pas]
ModuleType=SourceModule
FormState=1
FormOnTop=0

[C:\Projects\GUIPlay\src\du_BaseDialogs.pas]
ModuleType=SourceModule
FormState=1
FormOnTop=0

[C:\Projects\GUIPlay\src\dm_DataMain.pas]
ModuleType=SourceModule
FormState=1
FormOnTop=1

[C:\Projects\GUIPlay\src\du_Main.pas]
ModuleType=SourceModule
FormState=1
FormOnTop=1

[C:\Program Files\Borland\Delphi7\Projects\ProjectGroup1.bpg]
FormState=0
FormOnTop=0

[C:\Projects\GUIPlay\src\GUIPlay.dpr]
FormState=0
FormOnTop=0

[C:\Projects\GUIPlay\src\GUIPlay.todo]
FormState=0
FormOnTop=0

[EditWindow0]
ViewCount=4
CurrentView=2
View0=0
View1=1
View2=2
View3=3
CodeExplorer=CodeExplorer@EditWindow0
MessageView=MessageView@EditWindow0
Create=1
Visible=1
State=0
Left=212
Top=157
Width=1127
Height=757
MaxLeft=-1
MaxTop=-1
ClientWidth=1119
ClientHeight=723
LeftPanelSize=140
LeftPanelClients=CodeExplorer@EditWindow0
LeftPanelData=000004000000000000000000000000000000000000000000000100000000000000000C000000436F64654578706C6F726572FFFFFFFF
RightPanelSize=0
BottomPanelSize=0
BottomPanelClients=MessageView@EditWindow0
BottomPanelData=00000400010000000B0000004D6573736167655669657700000000000000000000000000000000000100000000000000000B0000004D65737361676556696577FFFFFFFF

[View0]
Module=C:\Projects\GUIPlay\src\du_FrameUtils.pas
CursorX=1
CursorY=1
TopLine=1
LeftCol=1

[View1]
Module=C:\Projects\GUIPlay\src\du_BaseDialogs.pas
CursorX=1
CursorY=1
TopLine=1
LeftCol=1

[View2]
Module=C:\Projects\GUIPlay\src\dm_DataMain.pas
CursorX=1
CursorY=1
TopLine=1
LeftCol=1

[View3]
Module=C:\Projects\GUIPlay\src\du_Main.pas
CursorX=1
CursorY=1
TopLine=1
LeftCol=1

[Watches]
Count=0

[Breakpoints]
Count=0

[AddressBreakpoints]
Count=0

[Main Window]
Create=1
Visible=1
State=2
Left=0
Top=0
Width=1571
Height=143
MaxLeft=-1
MaxTop=-1
MaxWidth=1579
MaxHeight=143
ClientWidth=1571
ClientHeight=109

[ProjectManager]
Create=1
Visible=1
State=0
Left=1188
Top=135
Width=345
Height=762
MaxLeft=-1
MaxTop=-1
ClientWidth=337
ClientHeight=736
TBDockHeight=305
LRDockWidth=438
Dockable=1

[AlignmentPalette]
Create=1
Visible=0
State=0
Left=200
Top=144
Width=156
Height=84
MaxLeft=-1
MaxTop=-1
ClientWidth=150
ClientHeight=60

[PropertyInspector]
Create=1
Visible=1
State=0
Left=3
Top=147
Width=272
Height=783
MaxLeft=-1
MaxTop=-1
ClientWidth=264
ClientHeight=757
TBDockHeight=783
LRDockWidth=272
Dockable=1
SplitPos=85
ArrangeBy=Name
SelectedItem=Name
ExpandedItems=
HiddenCategories=

[ObjectTree]
Create=1
Visible=0
State=0
Left=0
Top=142
Width=190
Height=314
MaxLeft=-1
MaxTop=-1
ClientWidth=182
ClientHeight=288
TBDockHeight=314
LRDockWidth=190
Dockable=1

[CodeExplorer@EditWindow0]
Create=1
Visible=1
State=0
Left=0
Top=12
Width=140
Height=711
MaxLeft=-1
MaxTop=-1
ClientWidth=140
ClientHeight=711
TBDockHeight=305
LRDockWidth=140
Dockable=1

[MessageView@EditWindow0]
Create=1
Visible=0
State=0
Left=12
Top=0
Width=1107
Height=66
MaxLeft=-1
MaxTop=-1
ClientWidth=1107
ClientHeight=66
TBDockHeight=66
LRDockWidth=443
Dockable=1

[DockHosts]
DockHostCount=0

Как вы можете видеть, на самом деле это список файлов, которые нужно открыть заново, вместе с некоторым определением положения / размера окон и порядка, в котором они открываются.

Удачи! : -)

1 голос
/ 22 января 2009

У меня это тоже было в D7 - но на самом деле только с одним конкретным проектом (по общему признанию, очень большим, много разных форм и самодельных компонентов). Другие проекты (некоторые такие же крупные) были в порядке.

Мне показалось, что это было каким-то образом связано с использованием фреймов и / или форм, которые были разделены на подклассы из других фреймов / форм, где в IDE / отладчике будет открыта форма-потомок, но не форма-предок.

Поскольку, как и вы, я чувствовал, что это было чудовищной болью - выключать и перезапускать IDE полдюжины раз в день, я попытался создать файл .DSK для проекта, который имел всю родительскую форму. что-то вроде этого, так что когда Delphi запустил этот проект, он автоматически открыл все остальные формы. Убедившись, что я правильно понял содержимое DSK, я сделал файл .DSK доступным только для чтения ...!

Это означало, что редактор «забудет», какие файлы я открывал в то время, но, по крайней мере, он всегда будет автоматически открывать все вещи, которые, казалось, заставляли IDE «вести себя». Если бы я собирался поработать над несколькими файлами в течение нескольких дней, я бы просто добавил их вручную в файл .DSK.

Кажется, я вспоминаю, что Delphi несколько раз жаловался на то, что файл доступен только для чтения, но этот метод избавил нас от 80% ежедневной боли.

А потом я сделал еще одну задачу - свести к минимуму загрузку диспетчера задач при загрузке системы. По крайней мере, тогда это был простой случай, когда ALT-TAB мог добраться до чего-то, что могло бы убить IDE. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...