AndyS01 Posted May 18, 2012 Share Posted May 18, 2012 There is a problem with the way _DebugOut() handles @error when the call to _DebugSetup() is commented out. The problem happens when the code calls some function that sets @error to some zero or non-zero value, and immediatly after making the call, calls _DebugOut() to log the returned value of @error, and after that, checks @error. With _DebugSetup() commented out, @error is always set to 3! The workaround is to preserve @error in a variable, call _DebugOut(), then check the preserved variable instead of checking @error. Example code before: CopyItem($ar_from, $ar_to, $selndx_from, $anchor_to) _DebugOut("+++: CopyItem returned with @error = " & @error) If (@error == 0) Then Return (1) EndIf Example code with the work-around: CopyItem($ar_from, $ar_to, $selndx_from, $anchor_to) $err = @error _DebugOut("+++: CopyItem returned with @error = " & @error) If ($err == 0) Then Return (1) EndIf Test code showing the problem: #include <Debug.au3> ;_DebugSetup(@ScriptName & "_debug.txt", False) test() Func test() Local $er1, $er2 test_0_func() $er1 = @error _DebugOut("+++: test_0_func() returns: @error = " & @error) $er2 = @error if (@error == 0) Then msgbox(0, "", "$er1="&$er1&",$er2="&$er2& ": test_0_func() returns 0") Else msgbox(0, "", "$er1="&$er1&",$er2="&$er2& ": test_0_func() returns non-zero") EndIf test_1_func() $er1 = @error _DebugOut("+++: test_1_func() returns: @error = " & @error) $er2 = @error if (@error == 0) Then msgbox(0, "", "$er1="&$er1&",$er2="&$er2& ": test_1_func() returns 0") Else msgbox(0, "", "$er1="&$er1&",$er2="&$er2& ": test_1_func() returns non-zero") EndIf EndFunc Func test_0_func() Return SetError(0, 0, 0) EndFunc Func test_1_func() Return SetError(2, 2, 2) EndFunc Link to comment Share on other sites More sharing options...
BrewManNH Posted May 18, 2012 Share Posted May 18, 2012 From the help file for _DebugOut_DebugSetup() must be called before the first call of _DebugOut(), or it will return with @Error = 3. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
AndyS01 Posted May 21, 2012 Author Share Posted May 21, 2012 (edited) I thought that the way to compile a script without _DebugOut() calls was to comment out the call to _DebugSetup(). If I have a local variable that I set, but only look at with a _DebugOut() call, when I comment out _DebugSetup(), I get a "variable declared but not used" warning when I run the script. That shows that the _DebugOut() calls are somehow commented out. For example: func abc() local $xx = Time() _debugout("+++: time is: " & $xx) endfunc Am I wrong? Andy Edited May 21, 2012 by AndyS01 Link to comment Share on other sites More sharing options...
BrewManNH Posted May 21, 2012 Share Posted May 21, 2012 _DebugOut calls will still be called, they just won't do anything other than return the @error = 3 because you have commented out the _DebugSetup. There's no way around it, either find and delete all lines that use _DebugOut, or do as you've done and preserve the @error in a variable when you're compiling. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now