From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Exception Handling within Gtkada
Date: Wed, 22 Sep 2021 12:22:49 +0200 [thread overview]
Message-ID: <sif05p$1l78$1@gioia.aioe.org> (raw)
In-Reply-To: nnd$0df7c13f$28edb84d@f58f09a4091a43c0
On 2021-09-22 10:42, ldries46 wrote:
> Op 21-9-2021 om 9:01 schreef Dmitry A. Kazakov:
>> On 2021-09-21 08:49, Vadim Godunko wrote:
>>> On Monday, September 20, 2021 at 3:06:02 PM UTC+3, ldries46 wrote:
>>>> I want an exception to be seen within an existing window of Gtkada
>>>> to be able to see details of the error. So I used:
>>>>
>>>> exception
>>>> when no_const =>
>>>> Main_Window.Buffer.Insert_At_Cursor
>>>> ("-------------------------------------------------------------------------"
>>>>
>>>> & To_String(CRLF));
>>>> Main_Window.Buffer.Insert_At_Cursor("Error : io_const" &
>>>> to_String(CRLF));
>>>> end Test_Exception;
>>>>
>>>> In this case the the program ends and the reason of the exception is
>>>> lost. I want this only for a selected nr of exceptions. In this case
>>>> the exception no_const.
>>>
>>> Generally, Ada exceptions must not left scope of callback function.
>>> Thus, such code should be added to each callback/event handler/etc.
>>> subprogram of your application.
>>
>> Right. Each handler should end like this:
>>
>> exception
>> when Error : others =>
>> Glib.Message.Log
>> ( "My fancy program",
>> Log_Level_Critical,
>> ( "Fault in On_Button_Click: "
>> & Exception_Information (Error)
>> ) );
>> end On_Button_Click;
>>
> I tried different approaches but they cannot solve my problem. Part of
> the problem is probably that I am developing a package which should be
> usable in all different kind of programs maybe even under programs using
> all different kind of GUI's.
You still may not propagate exceptions through C.
> That means that exception handling cannot
> always be done in the package but should be done in at least a package
> calling that problem. With this approach I tried to solve an earlier
> problem I asked about "Is there a way to see if a value is declared as a
> constant". I tried to solve that problem in a way that needed Exception
> handling during running to solve a design problem that could be made. I
> will need another way to go around that problem.
Posing a problem correctly is a half of solution.
Anyway, if you want to propagate exceptions through GTK, that is
possible to do by marshaling and then re-raising occurrence. GtkAda
contributions does this in the package Gtk.Main.Router. It also gives
stack trace of the exception in a popup dialog. And it can show the
location in GPS if that is running in the server mode.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
prev parent reply other threads:[~2021-09-22 10:22 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <nnd$672ea4c3$361caa01@549d065034cf3e10>
2021-09-21 6:49 ` Exception Handling within Gtkada Vadim Godunko
2021-09-21 7:01 ` Dmitry A. Kazakov
2021-09-21 7:24 ` Emmanuel Briot
2021-09-21 7:40 ` Dmitry A. Kazakov
2021-09-22 8:42 ` ldries46
2021-09-22 10:22 ` Dmitry A. Kazakov [this message]
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox