Jump to content
Sign in to follow this  
AndyS01

_DebugOut() changes @error when _DebugSetup() is commented out

Recommended Posts

AndyS01

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

Share this post


Link to post
Share on other sites
BrewManNH

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 Gude
How 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

Share this post


Link to post
Share on other sites
AndyS01

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 by AndyS01

Share this post


Link to post
Share on other sites
BrewManNH

_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 Gude
How 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

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×