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.
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.
They will in effect call `GtkAda.Bindings.Process_Exception`, which in turns calls a user-defined subprogram, see GtkAda.Bindings.Set_On_ExceptionsGenerally, 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:
We were talking the other day of the high-level Connect subprograms generated by GtkAda (`Gtk.Button.On_Clicked` and so on). Those will always catch exceptions and avoid propagating them to the C layer in gtk+ (which as Dmitry mentions is dangerous).
I think this should be the recommended approach for general exceptions. Of course, your callbacks should directly handle exceptions that they know how to recover from, and deal with that locally.
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:
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;
Op 21-9-2021 om 9:01 schreef Dmitry A. Kazakov:
On 2021-09-21 08:49, Vadim Godunko wrote:I tried different approaches but they cannot solve my problem. Part of
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;
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.
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.
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 402 |
Nodes: | 16 (2 / 14) |
Uptime: | 21:07:52 |
Calls: | 8,395 |
Calls today: | 3 |
Files: | 13,168 |
Messages: | 5,902,763 |