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.
_________________________
email scripting@wanadoo.nl homepage scripting@wanadoo.nl | Links | Summary of Site Site KiXforms FAQ kixtart.org library collection mirror MCA | FAQ & UDF help file UDF kixtart.org library collection mirror MCA | mirror USA | mirror europe UDF scriptlogic library collection UDFs | mirror MCA