Chimaera

Using @ScriptLineNumber for error checking

34 posts in this topic

i understand this function is usefull for UN compiled scripts etc but

I can easily add [102] in the error to determine a location like

' Error Found ', ' Netstop1 Failed Execution [102]

but if im changing stuff and adding code this will soon become a train wreck

Is there a simple way to add the correct line number without having to go and re edit all error codes every time i change something?

And this is for a compiled script btw

 

Share this post


Link to post
Share on other sites



#3 ·  Posted (edited)

You can put @ScriptLineNumber as a default argument to the function that write the error log/text. Example:

_Error("Netstop1 Failed Execution")

_Error("cheese steak jimmy's")

Func _Error($sText, $iLine = @ScriptLineNumber)
    MsgBox(0, "Line number " & $iLine, $sText)
EndFunc

 

Edit:

@ScriptLineNumber won't work for compiled files, you will have to rethink that.

Edited by AdmiralAlkex

Share this post


Link to post
Share on other sites

#4 ·  Posted (edited)

@ScriptLineNumber will always be the ScriptLineNumber  however much code you add. It's the whole point.

Are you using it wrong?

Post example.

It works for uncompiled

but on compiled it shows -1

I need it for Compiled

Im just trying to find a way of having scriptchange adjustable entries so when i change things therror location will be correct in the compiled version

 

Edited by Chimaera

Share this post


Link to post
Share on other sites

I think you'll have to write a pre-processor to run before compilation then to insert the numbers in the compiled script. Not sure there's any other way if you have to have compiled.

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

Yep so im seeing from the reading material

Thx all

Mind you im only interested where my line is in my script so i can still do them by hand...

which puts me within a couple of lines of the problem

Thing i dont get it this

Local $checkerror = @ScriptLineNumber
            Local $checkerror2 = $checkerror +2

you would think remembers the value as it is just a number but you cant get it to show outside when its compiled

 

Edited by Chimaera

Share this post


Link to post
Share on other sites

#10 ·  Posted (edited)

I had already looked at that but

I dont use Obfuscator anyway

And ive added

#AutoIt3Wrapper_Run_Au3Stripper=y
#Au3Stripper_Parameters=/mo

but it still returns -1 for this after compilation the [106] is the actuall

$hNotify = _Notify_Show(0, ' Error Found ', ' Netstop1 Failed Execution [106] ' & @ScriptLineNumber, 0, 1)

Just so we are clear on what im trying to achieve here

I dont really mind about knowing the line number from a 15000 compiled script

I only am bothered about what my line number is in my part of the script so i can goto my section and relook at the error for the Run or shellexecute etc that caused it

which is why im surprised that the number from this

Local $checkerror = @ScriptLineNumber
Local $checkerror2 = $checkerror

isnt remembered as a variable so i can pass it to the error report like this

$hNotify = _Notify_Show(0, ' Error Found ', ' Netstop1 Failed Execution [106] ' & $checkerror2, 0, 1)

Ive tried Int/Hex/Binary/Num and loads of other stuff but it cant remember it as a variable?

Edited by Chimaera

Share this post


Link to post
Share on other sites

There is nothing surprising since it's documented behavior:

@ScriptLineNumberLine number being executed - useful for debug statements (e.g. location of function call). Only significant in uncompiled scripts - note that #include files return their internal line numbering

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

The compiled script line number is always = -1


This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

The compiled script line number is always = -1

Not when you crash, which seems to be what JohnOne is talking about, (but not what the OP is doing) which is admittedly a little strange. If the crash dialog know the line why can't @ScriptLineNumber?

Share this post


Link to post
Share on other sites

which is admittedly a little strange.

Thats me all over

As much as i hate it, its not possible to have it work in the way my head tells me it should

Thats life, dont worry about it guys and thx

Share this post


Link to post
Share on other sites

Admiral,

Yes I was talking about the macro, the heart of the topic. Note that once compiled, the macro would count lines in the run script, contrary to the macro in non-compiled context.

J1,

@FuncName would help in simple scripts, but @CallStack even more in complex ones, even if we get only function names and no copy of arguments passed.


This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

I had already looked at that but

I dont use Obfuscator anyway

And ive added

#AutoIt3Wrapper_Run_Au3Stripper=y
#Au3Stripper_Parameters=/mo

but it still returns -1 for this after compilation the [106] is the actuall

$hNotify = _Notify_Show(0, ' Error Found ', ' Netstop1 Failed Execution [106] ' & @ScriptLineNumber, 0, 1)

 

 

Try this:

#AutoIt3Wrapper_Run_Au3Stripper=y
#Au3Stripper_Parameters=/mo /rsln

 

 


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 - BETA * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Best coding practices * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * 

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2017-06-04

Share this post


Link to post
Share on other sites

I don't know if I really understand the goal, but here could be a way :

 1/ Add the _MyDebug function (see below) to your code (at the end for example)
 2/ In SciTE, select the whole code, but not the MyDebug function
 3/ Go to Tools > Trace: Add Trace Lines
 4/ Go to Search > Replace (CTRL + H) : replace ConsoleWrite('>Error code by _MyDebug('>Error code

Now, you can compile your script and launch the compiled script with the /MyDebug parameter
 

_MyDebug() :

Func _MyDebug($sLine)
    Local Static $iDebugMode = -1
    If $iDebugMode = -1 Then
        If StringInStr($CmdLineRaw, "(?i)/MyDebug") Then
            _DebugSetup("MyDebug")
            $iDebug = 1
        Else
            $iDebugMode = 0
        EndIf
    EndIf

    If $iDebugMode Then
        _DebugOut($sLine)
    EndIf
EndFunc

It's just an idea, don't knock me ! :D

Share this post


Link to post
Share on other sites

you should check if _DebugSetup was aleready called and so you can chceck if debug window is visible


Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST API *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 - BETA * ADO.au3 UDF SMTP Mailer UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Best coding practices * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * 

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2017-06-04

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