#82015 - 2003-03-08 07:37 AM
Debugging script without user input. also during logging on. the advanced way.
|
MCA
KiX Supporter
Registered: 2000-04-28
Posts: 5152
Loc: Netherlands, EU
|
Dear,
(inspired on topic Debugging without user input)
There is an advanced way of debugging your script. First it is important that your script is correct. Secondly you can extend your script with additional kixtart code, which makes it possible to debug without the requirement of user input. Also during a log- ging on session it can be very handy.
SYNTAX checking part
Question: can I easily check mine kixtart code. Answer: YES
Our suggestion: use our tools kixstrip and kixref, which can find on our site. Documentation about [bkixstrip[/b] is also available. (Home - Kix downloads or Home - Kix tools or Summary of Site) With kixstrip you can verify your code on all kind of errors. f.e. missing quotations, unknown macros, incomplete block-structures (IF/ELSE/ENDIF,SELECT/CASE/ENDSELECT,etc.) Most common call is
kixstrip inputput.kix output.kix /block_check
kixstrip can create also automatically a general syntax structure. With kixref you can generate a cross reference map of variables, commands, functions, macros and labels you are using. Most common call is
kixref input.kix output.txt
Also it can translate your keywords to identical ones and it can show a short list of warnings. Those calls are
kixref input.kix output.kix /translate kixref input.kix output.txt /warnings
DEBUGging part
Question: is there a way to find our what line in a script cause an error during EXECUTION and during LOGGING ON? Answer: YES
So our suggestion: use our tool kixstrip, which can add all kind of debugging code to your script. so you can see exactly which part of your script creates possible 'hanging' situation or which part of your script slows it down. So it isn't necessary for you to add all kind of debugging code to it. Code which can also introduce new errors.
Our suggestion 1:
Very your syntax with our kixstrip tool. Possible call
kixstrip input.kix output.kix /block_check /show_structure
Our Suggestion 2:
A way to see what is going wrong can be done by our kixstrip tool with option /debug. At the end you only need to look at output file to see what was executed and what were the error status. The debugging file will not be overwritten.
QUESTIONs: - is it possible to see what is happening during a logging on session. - is it possible to see how long our script runs.
Advice: please run your script after adding our debugging code to it. How: - add debugging code? - is debugging possible without user intervention? YES - can is be usefull by logon or script problems? YES
A way of checking your script is by using our tool kixstrip on our site http://home.wanadoo.nl/scripting (Home - Kix downloads or Home - Kix tools or Summary of Site) With the option /debug we add additional kixtart code, which shows
- which line was executed.
- what was the time of execution.
- what was the error status of previous executed line.
So it is possible to catch the error status of kixtart statements during a logon session.and it will show the last executed before script is crashing.
An example we are using a reduced version of our os.kix script
code:
$os="" SELECT CASE (@inwin = 1) AND (@dos = "5.1") ; - Windows XP - $os="XP" CASE (@inwin = 1) AND (@dos = "5.0") ; - Windows 2000 - $os="W2K" CASE (@inwin = 1) ; - Windows NT - $os="NT4" CASE (@inwin <> 1) AND (@dos = "4.90") ; - Windows ME - $os="ME" CASE (@inwin <> 1) AND (@dos = "4.10") ; - Windows 98 - $os="W98" CASE (@inwin <> 1) AND (@dos = "4.0") ; - Windows 95 - $os="W95" CASE 1 $os="???" ; - undetermined - ENDSELECT ? "$$os "+$os
For changing your script with debugging code use f.e. kixstrip input.kix output.kix /debug
It is no longer necessary to change RedirectOutput statement for normal operation. The default debugging file will be %tmp%\kixdebug.txt. By an automatic cleaning of the %tmp% we advise to uncomment the line
;$_debug_file="c:\kixdebug.txt"
During the execution the information will be append to previous information. So it is possible to check the differences.
be sure above RedirectOutput file has write permissions.
A kixstrip output example of our script os.kix (reduced version) is:
code:
;CLS IF (instr("-3.0x-3.1x-3.2x-3.3x-","-"+substr(@kix,1,3)+"x-") <> 0) IF MessageBox("sorry, your kixtart "+@kix+" release is too old."+CHR(13)+CHR(10)+CHR(13)+CHR(10)+" please upgrade.","KiXtart "+@kix+" info",4112,300) ENDIF EXIT ENDIF COLOR C+/N ;AT (1,1) " "
$_debug_file="kixdebug.txt" ; - %tmp% directory - IF (len($_debug_file) <> 0) IF (substr("%tmp%",len("%tmp%"),1) = "\") $_debug_file="%tmp%"+$_debug_file ELSE $_debug_file="%tmp%\"+$_debug_file ENDIF ENDIF ;$_debug_file="c:\kixdebug.txt" IF RedirectOutput($_debug_file) ENDIF
? "-"+LCASE(@day)+" "+@date+" "+@time+"- kixtart "+@kix+"/4.00e script starting" IF (Val(substr(@kix,1,1)) >= 4) IF (len(@scriptname) <> 0) " ("+LCASE(@scriptname)+")" ENDIF ENDIF ? "-" IF ("$_debug_already_starting" <> "yes") ? "-curdir: "+LCASE(@curdir) ? "-scriptdir: "+LCASE(@scriptdir) IF (instr("-4.1x-","-"+substr(@kix,1,3)+"x-") <> 0) ? "-scriptname: "+LCASE(@scriptname) ENDIF ? "-startdir: "+LCASE(@startdir) ? "-" ? "-userid: "+LCASE(@userid)+"/"+LCASE(@wuserid) ? "-user priv: "+LCASE(@priv) IF (instr("-4.xx-","-"+substr(@kix,1,2)+"xx-") <> 0) ? "-version: inwin="+@inwin+"/dos="+@dos+"/productsuite="+@productsuite+"/producttype="+@producttype+"/csd="+LTRIM(RTRIM(@csd)) ELSE ? "-version: inwin="+@inwin+"/dos="+@dos ENDIF ? "-" IF (instr("-4.1x-","-"+substr(@kix,1,3)+"x-") <> 0) ? "-"+@cpu+" (memory "+MemorySize()+" MB)" ? "-" ENDIF ENDIF
$_debug_temp_name="" ; -format: yyyymmdd_hhmmss.sss_999 scriptname- IF (instr("-3.6x-","-"+substr(@kix,1,3)+"x-") <> 0) OR (Val(substr(@kix,1,1)) >= 4) IF (instr("-4.xx-","-"+substr(@kix,1,2)+"xx-") <> 0) $_debug_temp_name=@msecs SELECT CASE (len($_debug_temp_name) = 1) $_debug_temp_name="00"+$_debug_temp_name CASE (len($_debug_temp_name) = 2) $_debug_temp_name="0"+$_debug_temp_name ENDSELECT $_debug_temp_name="."+$_debug_temp_name IF Srnd(@msecs) ENDIF SLEEP 0.050 ELSE IF Srnd((-1)*32767/(substr(@time,7,2)+1)) ENDIF SLEEP 1 ENDIF $_debug_temp_name=substr(@date,1,4)+substr(@date,6,2)+substr(@date,9,2)+"_"+substr(@time,1,2)+substr(@time,4,2)+substr(@time,7,2)+$_debug_temp_name+"_"+Rnd() IF (len($_debug_temp_name) < 25) $_debug_temp_name=substr($_debug_temp_name+" ",1,25) ENDIF IF (instr("-4.1x-","-"+substr(@kix,1,3)+"x-") <> 0) IF (len(@scriptname) < 12) $_debug_temp_name=$_debug_temp_name+" "+substr(@scriptname+" ",1,12) ELSE $_debug_temp_name=$_debug_temp_name+" "+@scriptname ENDIF ENDIF ENDIF
IF ("$_debug_already_starting" <> "yes") ? "-debug file: "+$_debug_file ? "-debug name: "+LCASE($_debug_temp_name) ELSE IF (len($_debug_temp_name) <> 0) ? "-debug: "+LTRIM(RTRIM(LCASE($_debug_temp_name)))+" -> "+$_debug_file ELSE ? "-debug-file: "+$_debug_file ENDIF ENDIF
IF (instr("-3.6x-","-"+substr(@kix,1,3)+"x-") = 0) AND (Val(substr(@kix,1,1)) < 4) GOTO _debug_starting_point ENDIF DIM $_debug_name ; -create local variable- :_debug_starting_point $_debug_name=LCASE($_debug_temp_name) $_debug_already_starting="yes" ? "-" ?"----- start-"+@time+"-"+$_debug_name+"- @error @serror"?
?"- 1-"+@time+"-"+$_debug_name+"- @error @serror"? $os="" ?"- 2-"+@time+"-"+$_debug_name+"- @error @serror"? SELECT ?"- 3-"+@time+"-"+$_debug_name+"- @error @serror"? CASE (@inwin = 1) AND (@dos = "5.1") ; - Windows XP - ?"- 4-"+@time+"-"+$_debug_name+"- @error @serror"? $os="XP" ?"- 5-"+@time+"-"+$_debug_name+"- @error @serror"? CASE (@inwin = 1) AND (@dos = "5.0") ; - Windows 2000 - ?"- 6-"+@time+"-"+$_debug_name+"- @error @serror"? $os="W2K" ?"- 7-"+@time+"-"+$_debug_name+"- @error @serror"? CASE (@inwin = 1) ; - Windows NT - ?"- 8-"+@time+"-"+$_debug_name+"- @error @serror"? $os="NT4" ?"- 9-"+@time+"-"+$_debug_name+"- @error @serror"? CASE (@inwin <> 1) AND (@dos = "4.90") ; - Windows ME - ?"- 10-"+@time+"-"+$_debug_name+"- @error @serror"? $os="ME" ?"- 11-"+@time+"-"+$_debug_name+"- @error @serror"? CASE (@inwin <> 1) AND (@dos = "4.10") ; - Windows 98 - ?"- 12-"+@time+"-"+$_debug_name+"- @error @serror"? $os="W98" ?"- 13-"+@time+"-"+$_debug_name+"- @error @serror"? CASE (@inwin <> 1) AND (@dos = "4.0") ; - Windows 95 - ?"- 14-"+@time+"-"+$_debug_name+"- @error @serror"? $os="W95" ?"- 15-"+@time+"-"+$_debug_name+"- @error @serror"? CASE 1 ?"- 16-"+@time+"-"+$_debug_name+"- @error @serror"? $os="???" ; - undetermined - ?"- 17-"+@time+"-"+$_debug_name+"- @error @serror"? ENDSELECT ?"- 18-"+@time+"-"+$_debug_name+"- @error @serror"? ? "$$os "+$os
?"------- end-"+@time+"-"+$_debug_name+"- @error @serror" ? "-" ? "-"+LCASE(@day)+" "+@date+" "+@time+"- kixtart "+@kix+"/4.00e script ending" IF (Val(substr(@kix,1,1)) >= 4) IF (len(@scriptname) <> 0) " ("+LCASE(@scriptname)+")" ENDIF ENDIF ? "-" IF RedirectOutput("CON") ENDIF COLOR C+/N ? ? "Informative KIX "+@kix+":"+" debug info see "+CHR(34)+$_debug_file+CHR(34) IF (Val(substr(@kix,1,1)) >= 4) IF (len(@scriptname) <> 0) " ("+LCASE(@scriptname)+")" ENDIF ENDIF IF RedirectOutput($_debug_file) ENDIF ;($begin) ; ; sat 08-mar-2003 07:19:51 (kix 4.20 vs 4.00e) ; ;Informative KIXSTRIP: no errors found (input=18 output=18 skip=0). ; ;Summary KIXSTRIP: block structures ; - do:until [0:0] ; - for|each:in|to:step|next [0|0:0|0:0|0] ; - function:endfunction [0:0] ; - if:else:endif [0:0:0] ; - select:case:endselect [1:7:1] ; - while:loop [0:0] ;Informative KIXSTRIP: 1 block_structure found. ;Informative KIXSTRIP: no UDF's found. ;Informative KIXSTRIP: no labels found. ;Summary KIXSTRIP: BREAK CALL DEBUG DISPLAY ENDFUNCTION EXECUTE EXIT FUNCTION GET GETS GOSUB GOTO OLExxx PLAY QUIT RETURN RUN SHELL SLEEP THEN USE ; ;($end)
An output example of kix32 run:
code:
-saturday 2003/03/08 07:20:52- kixtart 4.21 Release Candidate 1/4.00e script starting (os.kix) - -curdir: d:\ -scriptdir: d: -startdir: d: - -userid: MCA/MCA -user priv: guest -version: inwin=2/dos=4.90/productsuite=0/producttype=Windows Me/csd= - -debug file: c:\temp\kixdebug.txt -debug name: 20030308_072052.610_2030 - ----- start-07:20:52-20030308_072052.610_2030 - 0 The operation completed successfully.
- 1-07:20:52-20030308_072052.610_2030 - 0 The operation completed successfully.
- 2-07:20:52-20030308_072052.610_2030 - 0 The operation completed successfully.
- 10-07:20:52-20030308_072052.610_2030 - 0 The operation completed successfully.
- 11-07:20:52-20030308_072052.610_2030 - 0 The operation completed successfully.
- 18-07:20:52-20030308_072052.610_2030 - 0 The operation completed successfully.
$os ME ------- end-07:20:52-20030308_072052.610_2030 - 0 The operation completed successfully. - -saturday 2003/03/08 07:20:52- kixtart 4.21 Release Candidate 1/4.00e script ending (os.kix) -
When you still have problems please:
- put some code on the board.
- put your logon batch file on the board.
- put the output of a debugging run on the board.
- put a DIR list of your NETLOGON directory on the board.
- put a DIR list of your clients on the board with contains information
about: KIX32.EXE and KX*.DLL Greetings. NOTES:
- Before using the debug mode be sure your script doesn't generated
errors. With the kixstrip option /Block_Check you can verify that. So you should get something like: quote: ;Informative KIXSTRIP: no errors found (input=18 output=18 skip=0).
- After convert your script for debugging don't throw away the original script.
Kixstrip can't remove inserted debug code. btw: it is only some additional information about how you can debug your script.
btw: with kixstrip ? you get a summary of possible options. The result will be something like this:
code:
Kixstrip 4.20 (vs 4.00e) (c) MCA - scripting@wanadoo.nl - 2003 ------------------------------------------------------------------------------ kixstrip [input] [output] /Block_Check or /BC /Combine /Debug /Headers /License /License=[var] /Performance /Print /Progress /Show_Errors or /SE /Show_Structure or /SS /Translate /TAB=[num] (def: 6) default: /Combine /Headers /License (other options are negative) other: - options with prefix "/No" will be ignored. f.e. /NoDebug /NoTab - /Block_Check /Tab=2 (auto set: /NoCombine /NoLicense /Print ) /Debug (auto set: /NoLicense /Print /Show_Errors ) - /Block_Check (reformat kixtart code inc. block structure ) /Combine (combine lines to one line ) /Debug (insert "line numbers" for each printed line ) /Headers (insert summary report as footer ) /Performance (insert "indicator" for each executed line) /Print (do not remove print statements ) /Progress (insert "indicator" for each printed line ) /Show_Errors (insert error messages in output file ) /Show_Structure (insert block structures in output file ) /Translate (convert keywords to upper/lower-case ) examples - kixstrip test.kix test.out /Block_Check /Debug - kixstrip test.kix test.out /Performance /Show_Structure
btw: Symbol on our homepage has been linked to related http://kixtart.org topic.
|
Top
|
|
|
|
Moderator: Jochen, Radimus, Glenn Barnas, Allen, Arend_, ShaneEP, Mart
|
0 registered
and 768 anonymous users online.
|
|
|