Ada_Ru форум

Обсуждение языка Ада

backtrace & exception

Оставить новое сообщение

Сообщения

Alexey Veselovsky
backtrace & exception
2008-04-27 20:31:36

Возможно ли в Аде сделать человекочтаемый вывод backtrace для исключений?

Т.е. как в java -- если случилось исключение которое никто не

обработал, то в консоль пишется backtrace в человекочитабельном виде (т.е. файл, номер строки, функция. И так для каждого уровня.). А не просто пачка адресов.

Alexey Veselovsky wrote:

Возможно ли в Аде сделать человекочтаемый вывод backtrace для исключений?

 

Т.е. как в java -- если случилось исключение которое никто не

обработал, то в консоль пишется backtrace в человекочитабельном виде

(т.е. файл, номер строки, функция. И так для каждого уровня.). А не

просто пачка адресов.

 

GNAT.Traceback.Symbolic.

 

Но нужна Pro или GPL версия. Для всех других предстоит весьма интересная процедура построеия библиотеки libaddr2line из одноимённой программы в binutils.

On Sun, 27 Apr 2008 20:31:36 +0000, you wrote:

 

Возможно ли в Аде сделать человекочтаемый вывод backtrace для исключений?

 

Т.е. как в java -- если случилось исключение которое никто не

обработал, то в консоль пишется backtrace в человекочитабельном виде (т.е. файл, номер строки, функция. И так для каждого уровня.). А не просто пачка адресов.

 

procedure Main is

...

begin

...

exception

when Error : others =>

Put_Line (Exception_Information (Error));

Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (Error)); end Main;

 

Плюс кое-какие ключи в проекте нужны.

 

(Не знаю, почему это не поведение по-умолчанию в GNAT.)

 

Имеется нечто аналогичное для GtkAda, если интересно.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Интересно. Но я пока видимо до GtkAda не дорос. Я банально её

установить пока не смог.

 

28.04.08, Dmitry A. Kazakov<alt@dmitry-kazakov.de> написал(а):

Alexey Veselovsky wrote:

Интересно. Но я пока видимо до GtkAda не дорос. Я банально её

установить пока не смог.

 

Мой ребенок, выбрав себе Аду для ОО практикума в университете, неделю

мрачно матерился, пытаясь установить GtkAda. Плюнул,

взял QTAda - и все получилось....

On Mon, 28 Apr 2008 13:17:06 +0000, you wrote:

 

Интересно. Но я пока видимо до GtkAda не дорос. Я банально её

установить пока не смог.

 

Windows или Linux, и какая версия? 2.10 должна без проблем компилироваться под Linux. Windows версию см.:

 

http://www.ada-ru.org/win_bin_en

 

Там, как я помню, в путях кое-чего чуть-чуть подправить надо, и

Gtk.Message_Dialog не в проекте. А так, все отлично работает. Максим Резник ее собирал, он все знает.

 

А, вообще, присоединяюсь к другим ораторам. Мне Gtk самому жутко не нравится, хотя я его активно использую. И, чем дальше пользую, тем все меньше он нравится. Я упомянул его только к тому, что с ним просто стек печатать не спасает. Стек к тому моменту бывает уже запорот. Там надо Gtk-шные ошибки перехватывать.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Dmitry A. Kazakov wrote:

On Mon, 28 Apr 2008 13:17:06 +0000, you wrote:

 

А, вообще, присоединяюсь к другим ораторам. Мне Gtk самому жутко не

нравится, хотя я его активно использую. И, чем дальше пользую, тем все

меньше он нравится.

 

А что такого в Gtk плохого|неудобного? (спрашиваю, ибо пока ни с Gtk ни с Qt

вплотную на Аде не работал. Интерестно на будущее)

 

Влад

On Mon, 28 Apr 2008 17:50:39 +0300, you wrote:

 

Dmitry A. Kazakov wrote:

 

On Mon, 28 Apr 2008 13:17:06 +0000, you wrote:

 

А, вообще, присоединяюсь к другим ораторам. Мне Gtk самому жутко не нравится, хотя я его активно использую. И, чем дальше пользую, тем все меньше он нравится.

 

А что такого в Gtk плохого|неудобного? (спрашиваю, ибо пока ни с Gtk ни с Qt вплотную на Аде не работал. Интерестно на будущее)

 

На вскидку, Gtk,

 

иногда, чрезвычайно сложно делать самые простые вещи. Это потому, что callback-и не примитивные операции widget-типов. Нет четкого разделения на события порожденные низкоуровневым rendering-ом и пользовательским вводом. Отсюда, callback-и надо часто маскировать от самих себя. Мультизадачность не поддерживается. Callback-и синхронные, но их параметры все равно копируются (marshaling), чтобы медленнее было, я так понимаю. И вообще, синхронный callback - просто подпрограмма, зачем огород городить? Счетчики ссылок при создании объектов когда 1, а когда "плавающие." Работать с ними надо в-ручную, т.к. соответствующие типы не Controlled. Кстати, и widget-ы

- нет, т.е. финализацию надо навешивать callback-ом. При этом они и не limited, т.е. mix-in через access-дискриминант не сделать. Для работы со стилями есть надцать разных примочек - properties, style properties, styles, child properties, просто параметры. Что, где, и, главное когда ставится - лотерея. Особенно нудно иметь дело со style properties, которые недоступны пока widget не реализована (~видима), т.е. надо вешать callback на реализацию и из него окончательно инициировать widget. Т.е. те же грабли, как и в Windows с его WM_INITDIALOG. Паковка widget в контейнеры - изящно в теории, но неудобно на практике, а выглядит жутко. Надо потом, бороться разными хитрыми и не очевидными способами, чтобы добиться желаемого выравнивания и изменения размеров. Если нужно сделать что-нибудь не очень тривиальное, например, pop-up окно ловящее клавиатуру и мышь, то биться придется всерьез, причем, исход совсем не гарантирован.

 

Про Qt ничего не скажу.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Dmitry A. Kazakov wrote:

 

Про Qt ничего не скажу.

 

Можно я замолвлю слово?

 

Многие вещи в Qt устроены по другому.

 

Контроль памяти ведётся без использования подсчёта ссылок, но с использованием отношения родитель-потомок. При уничтожении родителя все потомки уничтожаются вместе с ним. На стороне Ada все классы-виджеты представлены контролируемыми лимитированными типами. При уничтожении объекта полностью поддерживается Ada семантика (вызывается Finalize).

 

Вся библиотека построена полностью по объектно-ориентированной концепции. Такой структурной составляющей как подпрограмма обратного вызова здесь просто не существует. Вместо этого каждый объект может возбуждать свои сигналы и принимать чужие сигналы на свои слоты. Механизм сигналов-слотов безопасен с точки зрения многозадачности. Объект из одной нити может возбудить сигнал, а объект в другой нити получит вызов своего слота.

 

Отдельно существует классический механизм событий, т.е. извещения об асинхронных внешних изменениях. Приход события влечёт вызов соответствующей диспетчеризируемой подпрограммы.

 

Для расстановки виджетов используется аналогичный подход, но называемый Layout. Прочитав инструкцию на соответствующий режим программы Qt Designer и полчаса побаловавшись вполне можно пользоваться.

 

Стили можно задавать по разному. Можно использовать стандартные для платформы (те, что в Control Panel задаются). Можно до офигения разукрашивать задавая значения свойст. А можно просто написать .css и привязать его.

 

В версии связки 1.0 не очень удобно создавать свои виджеты. Нужно было обязательно переопределить три подпрограммы, написать объявление импортируемой константы, да и ещё подпакет объявить. Потом всё это из отдельных модулей подключать. В версии 1.1 это дело подправили, как отдельно комилируемые модули остались только реализации подпрограмм возбуждения сигналов. Обо всём остальном можно забыть.

 

И ещё для QtAda потребуется хороший компилятор Ada 2005. С этим пока напряжёнка, но надеюсь со временем ситуация исправится. На сегодняшний день основная часть ошибок в GNAT GPL 2007 и GCC GNAT 4.3.0 выявлена и найдены способы борьбы с ними.

Vladyslav Kozlovskyy пишет:

Dmitry A. Kazakov wrote:

А что такого в Gtk плохого|неудобного?

Если запускать с Терминала, какая бы это ни была программа, валятся assert failure и разного рода ошибки; само по себе уже жутковатое зрелище. При этом с виду всё работает.

 

Ещё неприятно, как поддерживается Mac OS X. Вообще, для Mac OS X это не впервой. И Qt недопиленный, халтура, и шрифты косячные в Gecko. Говорят, в FF3 косяки с оформлением и шрифтами пофиксили, хочется верить. Иначе я просто затрудняюсь выбрать тулкит на будущее. С wxWidgets я поработал вплотную немного, портанул на днях XML Copy Editor, недоволен результатом. Как всегда, больше остальных страдает Mac OS X версия. У VLC, лучшей для меня рекламы wx, как выяснилось, для Mac OS X интерфейс контроллёра был специально переписан, там на wx интерфейс диалогов. Поэтому в VLC не возникает общей проблемы wx и Qt, когда специальные элементы меню остаются либо непереведёнными, либо переведёнными, но не на своём месте. Но всё же это лучше, чем Qt.

 

P. S.

FYI: imendio's vision on GTK+3

http://developer.imendio.com/sites/developer.imendio.com/files/gtk-hackfest-berlin2008.pdf

 

у GTK+ есть шанс исправить часть своих ошибок

 

-- If you want to get to the top, you have to start at the bottom

Иван Левашев wrote:

 

на своём месте. Но всё же это лучше, чем Qt.

 

Это так было. Trolltech и Apple некоторое время работали над проблемой и вот первый результат:

 

http://trolltech.com/company/newsroom/announcements/press.2008-03-03.5380825926

 

Летом этого года выйдет бета-версия порта, а Qt 4.5 будет уже его использовать.

 

;-)

Иван Левашев wrote:

 

Ещё неприятно, как поддерживается Mac OS X. Вообще, для Mac OS X это не впервой. И Qt недопиленный, халтура, и шрифты косячные в Gecko. Говорят, в FF3 косяки с оформлением и шрифтами пофиксили, хочется верить. Иначе я просто затрудняюсь выбрать тулкит на будущее. С wxWidgets я поработал вплотную немного, портанул на днях XML Copy Editor, недоволен результатом. Как всегда, больше остальных страдает Mac OS X версия. У VLC, лучшей для меня рекламы wx, как выяснилось, для Mac OS X интерфейс контроллёра был специально переписан, там на wx интерфейс диалогов. Поэтому в VLC не возникает общей проблемы wx и Qt, когда специальные элементы меню остаются либо непереведёнными, либо переведёнными, но не на своём месте. Но всё же это лучше, чем Qt.

 

Кстати, а что есть связка для wxWidgets? А где?

On Tue, 29 Apr 2008 12:54:32 +0700, you wrote:

 

P. S.

FYI: imendio's vision on GTK+3

http://developer.imendio.com/sites/developer.imendio.com/files/gtk-hackfest-berlin2008.pdf

 

у GTK+ есть шанс исправить часть своих ошибок

 

Ну-ну, ломать весь интерфейс каждые 4 года, это, разумеется, должно поправить все ошибки... Что за ошибки там тоже написано. Оказывается, в борще не хватает IDL и анимаций.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Vadim Godunko пишет:

Кстати, а что есть связка для wxWidgets? А где?

Она заброшена. http://wxada.tigris.org/

Она была сделана с помощью gnat-swig, там проблемы возникли:

 

---

wxValidator is derived from wxEvtHandler which in turn is derived from

wxObject; the wxEvtHandler is a non-copyable object yet the others are

copyable.

---

то есть, цепочка nonlimited->limited->nonlimited

 

-- If you want to get to the top, you have to start at the bottom

Dmitry A. Kazakov пишет:

в борще не хватает IDL

А в IDL–то что плохого? К тому же, IDL там и так уже есть, только не

повсеместно.

 

-- If you want to get to the top, you have to start at the bottom

Иван Левашев wrote:

Vadim Godunko пишет:

Кстати, а что есть связка для wxWidgets? А где?

Она заброшена. http://wxada.tigris.org/

Мда... Жаль...

 

Она была сделана с помощью gnat-swig, там проблемы возникли:

 

Я как-то очень плохо отношусь к gnat-swig. Замысел может и был грандиозен, но как-то ничего из этого не вышло. Хотя такой результат вполне закономерен :-)

 

---

wxValidator is derived from wxEvtHandler which in turn is derived from

wxObject; the wxEvtHandler is a non-copyable object yet the others are

copyable.

---

то есть, цепочка nonlimited->limited->nonlimited

 

Ну это уже возможно проблема архитектуры самого wxWidgets.

Dmitry A. Kazakov wrote:

On Tue, 29 Apr 2008 12:54:32 +0700, you wrote:

 

P. S.

FYI: imendio's vision on GTK+3

http://developer.imendio.com/sites/developer.imendio.com/files/gtk-hackfest-berlin2008.pdf

 

у GTK+ есть шанс исправить часть своих ошибок

 

Ну-ну, ломать весь интерфейс каждые 4 года, это, разумеется, должно

поправить все ошибки...

А почему нет? В смысле конечно не то, что смена интерфейса избавит от ошибок, а в смысле почему бы действительно с таким интервалом не отбразывать нехорошие идеи и не вводить что-то новое?

On Tue, 29 Apr 2008 15:17:52 +0700, you wrote:

 

Dmitry A. Kazakov пишет:

в борще не хватает IDL

А в IDL–то что плохого? К тому же, IDL там и так уже есть, только не повсеместно.

 

Я думаю, что язык программирования должен быть один. Если хочется больше, значит, либо язык плох, либо кто-то не умеет им пользоваться. Ну С-то, конечно, не хорош, но, почему это они думают, что их IDL и, что они там еще наворотят, будет лучше? 2 + 2 = незачет.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

On Tue, 29 Apr 2008 12:33:05 +0400, you wrote:

 

Dmitry A. Kazakov wrote:

On Tue, 29 Apr 2008 12:54:32 +0700, you wrote:

 

P. S.

FYI: imendio's vision on GTK+3

http://developer.imendio.com/sites/developer.imendio.com/files/gtk-hackfest-berlin2008.pdf

 

у GTK+ есть шанс исправить часть своих ошибок

 

Ну-ну, ломать весь интерфейс каждые 4 года, это, разумеется, должно поправить все ошибки...

А почему нет? В смысле конечно не то, что смена интерфейса избавит от ошибок, а в смысле почему бы действительно с таким интервалом не отбразывать нехорошие идеи и не вводить что-то новое?

 

А зачем, собственно, было нехорошие идеи вводить? "Разруха начинается в голове." Проблемы Gtk, как я понимаю, - архитектурные. Предлагаемые решения проблем сводятся к косметике и изменению интерфейсов. (Знакомо, не правда-ли? MS Windows Vista.)

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Dmitry A. Kazakov пишет:

 

А зачем, собственно, было нехорошие идеи вводить? "Разруха начинается в

голове."

как всегда, принцип Worse Is Better

 

-- If you want to get to the top, you have to start at the bottom

Dmitry A. Kazakov пишет:

Я думаю, что язык программирования должен быть один.

К проектам такого типа эти рассуждения неприменимы. Gtk+ разработан, чтобы быть общей точкой множества разных программ. Две программы могут иметь соответственно GtkPlug и GtkSocket, и взаимодействовать через их связь. Как можно, используя разные тулкиты, добиться того же? На Windows и X11, насколько мне известно, это возможно через системный хак, но на Mac OS X придётся сериализовать все взаимодействия. imendio как раз та компания, которая взялась портировать под эту систему.

 

Ну С-то, конечно, не хорош, но, почему это они думают, что их IDL и, что они там еще наворотят, будет лучше?

IDL как раз помог бы сгенерировать прокси объекты разной конфигурации.

http://mid.gmane.org/40273529.2080307%40rost.ru

Возможно, даже получится добиться сетевой прозрачности. Будет быстрый аналог удалённых иксов. Кроссплатформенный, с альфа–каналом и анимациями.

 

-- If you want to get to the top, you have to start at the bottom

Новое сообщение:
Страницы: 1 2

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти