Я давно перешёл с Delphi 7 на Delphi XE 8, и долго не знал про важные новые фичи, в частности статические классы (если это корректный термин) и дженерики.
Есть ли ещё в новых версиях Delphi важные принципиально новые фичи, о которых полезно знать практически всем?
И ещё вопрос: если программа зависла (например бесконечный цикл), как найти код где этот цикл. Раньше в Delphi 7 я нажимал кнопку паузы, и среда разработки переходила в режим отладки, показывая место кода, исполняющегося в данный момент (именно кода паскаля а не ассемблера), и можно было далее нажимать F8 и проводить отладку. Сейчас же эта кнопка показывает асссемблерный код, и я не знаю как перейти из него в код, понятный для меня. Сейчас я для такой отладки ставлю breakpoint на подозрительном участке моего кода, в надежде что именно там есть зацикливание, и если это так, Delphi корректно перейдёт в режим отладки.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Возник ещё один вопрос. У меня при работе программы иногда случается out of memory. Видимо где-то не освобождаются динамические массивы, или не уничтожаются классы. Можно ли быстро проверить, где именно?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Здравствуйте, Khimik, Вы писали:
K>Я давно перешёл с Delphi 7 на Delphi XE 8, и долго не знал про важные новые фичи, в частности статические классы (если это корректный термин) и дженерики. K>Есть ли ещё в новых версиях Delphi важные принципиально новые фичи, о которых полезно знать практически всем? K>И ещё вопрос: если программа зависла (например бесконечный цикл), как найти код где этот цикл. Раньше в Delphi 7 я нажимал кнопку паузы, и среда разработки переходила в режим отладки, показывая место кода, исполняющегося в данный момент (именно кода паскаля а не ассемблера), и можно было далее нажимать F8 и проводить отладку. Сейчас же эта кнопка показывает асссемблерный код, и я не знаю как перейти из него в код, понятный для меня. Сейчас я для такой отладки ставлю breakpoint на подозрительном участке моего кода, в надежде что именно там есть зацикливание, и если это так, Delphi корректно перейдёт в режим отладки.
Не спец по дельфи, но по идее когда исполнение остановилось, то где-то должно быть окошко со стеком, в котором можно пройтись по функциям/процедурам, вызыванным на уровень выше, и вот там уже где-то появится делфи код.
Второй уровень сложности: вполне возможно, что команда на остановку вызвана через отдельный поток исполнения. Тогда прежде всего нужно найти окошко с потоками и выбрать именно тот, где исполняется код (у каждого потока свой стек)
Здравствуйте, Khimik, Вы писали:
K>Возник ещё один вопрос. У меня при работе программы иногда случается out of memory. Видимо где-то не освобождаются динамические массивы, или не уничтожаются классы. Можно ли быстро проверить, где именно?
Дин. массивы должны сами освобождаться, если с ними не играли на низком уровне.
Здравствуйте, MBo, Вы писали:
MBo>Здравствуйте, Khimik, Вы писали:
K>>Возник ещё один вопрос. У меня при работе программы иногда случается out of memory. Видимо где-то не освобождаются динамические массивы, или не уничтожаются классы. Можно ли быстро проверить, где именно?
MBo>Дин. массивы должны сами освобождаться, если с ними не играли на низком уровне.
MBo>А вообще: ReportMemoryLeaksOnShutdown
Я теперь пользуюсь этой фичей, но мне всё равно не хватает лёгкого способа отловить старые накопившиеся баги. Такой способ появился бы, если бы я смог подключить JclDebug к своему проекту.