[Gambas-user] tracking down toolkit erors
Brian G
brian at westwoodsvcs.com
Tue Aug 10 15:49:38 CEST 2021
Hi Bruce.
That idea just came to me last night .. seems to work.
Sorry
--
Thanks
Brian G Monday, 09 August 2021, 11:46PM -07:00 from Brian G brian at westwoodsvcs.com :
>Bruce,
>If you make the following change your errors will go to the console
>and all underlying C code errors will go to the pipe. No need for filters in the
>File_read function. probably a good idea to log them in case anything really
>does go wrong.
>If you don't want to capture those errors at all then just make writer open as "/dev/null"
>skip the whole open for read.
>
>"Failure is the key to success;
> each mistake teaches us something" .. Morihei Ueshiba
>Brian G
>
>----- On Aug 9, 2021, at 7:41 AM, Bruce Steers < bsteers4 at gmail.com> wrote:
>>Many Thanks BrianG. With this and your other help I now have this routine....
>>
>>' Gambas class file
>>
>>Extern dup2(OldFD As Integer, newfd As Integer) In "libc:6"
>>Private Writer As File
>>Private Reader As File
>>Private restore As File
>>
>>Public Sub _new()
>> Writer = Open Pipe "/tmp/testpipeout" For Write
>> restore = File.Err
>> dup2(Writer.handle, 2)
>> Reader = Open Pipe "/tmp/testpipeout" For Read Watch
>>End
>Public Sub _new()
> Writer = Open Pipe "/tmp/testpipeout" For Write
>
>' get the error destination to a known handle
> restore = Open "/dev/null" For Write ' open any old file to get a handle
> dup2(2, restore.handle) ' Make that handle equal std error
> Error To restore ' point gambas's error output to the original term
>
> dup2(Writer.handle, 2)
> Reader = Open Pipe "/tmp/testpipeout" For Read Watch
>
>End
>
>Alternatively if not wanting to capture the other libc errors then just:
>
>Public Sub _new()
> Writer = Open Pipe "/dev/null" For Write
>
>' get the error destination to a known handle
> restore = Open "/dev/null" For Write ' open any old file to get handle
> dup2(2, restore.handle) ' Make that handle equal std error
> Error To restore ' point gambas's error output to the original term
>
> dup2(Writer.handle, 2) ' All other outputs to null don't need file_read at all
>
>End
>
>>
>>
>>Public Sub File_read()
>>
>> Dim buffer As String
>>
>> buffer = Read #Last, -Lof(Last)
>> For Each sLine As String In Split(buffer, "\n")
>> If Not sLine Then Continue
>> If sLine Like "(" & Application.Name & ":*): G*k-*" Then Continue
>> Print sLine
>> Next
>>
>>End
>Public Sub File_read()
> Dim buffer As String
> buffer = Read #Last, -Lof(Last)
> '' write to some logfile here maybe
>End
>
>>
>>
>>Public Sub Form_Close()
>> If Writer Then Writer.Close()
>> If Reader Then Reader.Close()
>> dup2(restore.handle, 2)
>>End
>>
>>
>>Public Sub Button1_Click()
>>
>> Print "Print Something"
>> Debug "Debug Something"
> Error "something"
>>
>>
>>End
>>I had to check each line of the buffer individually and used Like to pattern-match the Gtk- Gdk- messages
>>
>>So with that code my own Debug and Error messages still output (albeit to stdout but that's fine) just the gtk/gdk messages are gone :)
>>Thanks again Brian , much respect :)
>>BruceS
>>
>>
>>
>>On Sun, 8 Aug 2021 at 03:34, Brian G < brian at westwoodsvcs.com> wrote:
>>>Bruce replace your _new with this code
>>>Extern dup2(OldFD As Integer, newfd As Integer) In "libc:6"
>>>Static Dummy As File
>>>Static Public Sub _init()
>>> dummy = Open "/dev/null" For Write
>>> dup2(dummy.Handle, 1)
>>> dup2(dummy.handle, 2)
>>>End
>>>Should give you what you want without all the fiddle
>>>"Failure is the key to success;
>>> each mistake teaches us something" .. Morihei Ueshiba
>>>Brian G
>>>
>>>----- On Aug 7, 2021, at 12:39 PM, Bruce Steers < bsteers4 at gmail.com> wrote:
>>>>
>>>>
>>>>On Thu, 5 Aug 2021 at 20:34, Bruce Steers < bsteers4 at gmail.com> wrote:
>>>>>
>>>>>
>>>>>On Wed, 4 Aug 2021 at 00:53, < jose.rodriguez at cenpalab.cu> wrote:
>>>>>>August 3, 2021 2:29 PM, "Bruce Steers" < bsteers4 at gmail.com> wrote:
>>>>>>>I have this program i'm developing that was starting and stopping cleanly then i recently added some controls and did various other things and now it says this when it starts...
>>>>>>>(Desktop-ish:12906): Gtk-WARNING **: 16:29:25.336: Theme parsing error: :1:15: Expected a valid selectorIs there a way to track down what's causing it?
>>>>>>>thanks
>>>>>>>BruceS
>>>>>>
>>>>>>GTK has always output loads of different errors with many programs (not gambas ones, I mean), when run in a terminal. People say it depends on the current theme and whatnot...
>>>>>>
>>>>>
>>>>>Indeed, Pluma was always my texteditor of choice and that used to pump out loads of warnings.
>>>>>(but now of course i use my own editor i wrote with gambas that has all those cool Texteditor features ;) )
>>>>>
>>>>>Would be great to be able to catch the warnings though.
>>>>>Either a way to track what exactly is causing them or just suppress the messages.
>>>>>
>>>>>
>>>>>
>>>>>BruceS
>>>>
>>>>
>>>>so best answer i have so far is this "hack"...
>>>>Uses gb.args
>>>>if the arg -q or --quiet is given then before the app loads it launches itself with any and all args plus "2> /dev/null" to redirect the error output and an additional arg -s.
>>>>
>>>>when the 2nd run instance quits the 1st one that launched the second one also quits before it's even done anything.
>>>>
>>>>
>>>>Public Sub _new()
>>>>
>>>> Args.Begin()
>>>> Dim bQuiet As Boolean = Args.Has("q", "quiet", "supress gtk error messages")
>>>> If bQuiet Then bQuiet = (Args.Has("s", "supressed", "supressed gtk error warnings") == False)
>>>> Args.End()
>>>>
>>>> If bQuiet And File.In.IsTerm Then ' if we are not run from a terminal then no need for any of this
>>>> Dim sRestOfargs As String[] = Args.All.Copy()
>>>>
>>>> ' the next 2 lines just handle if being run from the IDE and make Arg[0] be executable name.
>>>> If Not InStr(sRestOfargs[0], "/") Then sRestOfargs[0] = Application.Path &/ Application.Name
>>>> If File.Ext(sRestOfargs[0]) <> "gambas" Then sRestOfargs[0] &= ".gambas"
>>>>
>>>> sRestOfargs.Insert(["-s", "2> /dev/null"])
>>>> Shell sRestOfargs.Join(" ")
>>>> Me.Close
>>>> Return
>>>> Endif
>>>>
>>>>End
>>>>
>>>>Attached is a simple test app
>>>>It's a form with a tiny little TextArea in it, so small it produces warnings on my system when i move the mouse around the window...
>>>>(Test:79673): Gdk-CRITICAL **: 20:26:58.775: gdk_window_is_visible: assertion 'GDK_IS_WINDOW (window)' failed
>>>>
>>>>Run with -q and all is quiet.
>>>>./Test.gambas -q
>>>>
>>>>Of course this method will suppress ANY error messages ,
>>>>shell commands can be fixed by adding '> 2&1'
>>>>Shell "/run/mycommand 2> &1"
>>>>that redirects error output to stdout and stdout is still showing
>>>>
>>>>Please somebody tell me there's a better way...
>>>>
>>>>BruceS
>>>>
>>>>
>>>>
>>>>----[ http://gambaswiki.org/wiki/doc/netiquette ]----
>>>
>>>----[ http://gambaswiki.org/wiki/doc/netiquette ]----
>>
>>
>>----[ http://gambaswiki.org/wiki/doc/netiquette ]----
>
>----[ http://gambaswiki.org/wiki/doc/netiquette ]----
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gambas-basic.org/pipermail/user/attachments/20210810/1da25bd0/attachment-0001.htm>
More information about the User
mailing list