From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.6 Path: eternal-september.org!reader02.eternal-september.org!aioe.org!x6YkKUCkj2qHLwbKnVEeag.user.46.165.242.91.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Exception Handling within Gtkada Date: Wed, 22 Sep 2021 12:22:49 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <27364e05-ceac-49de-b6b4-954609d00543n@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Info: gioia.aioe.org; logging-data="54504"; posting-host="x6YkKUCkj2qHLwbKnVEeag.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.9.2 Xref: reader02.eternal-september.org comp.lang.ada:62815 List-Id: 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