• =?UTF-8?Q?=5Binfo_stacktrace=5D_=E2=86=92_ask_for_assistance?=

    From aotto1968@21:1/5 to All on Mon Nov 25 22:13:38 2024
    Hi,

    my goal is to transfer the "errorInfo" into a "stacktrace" used by my SW.

    I require: command, fileName and lineNumber
    the [info errorstack] return "something" which is missing some essential parts.

    [info errorstack]:
    INNER {invokeStk1 ::tcllcconfig::LcSettingC::MK_NULL LookupBool in} CALL {::oo::Obj40::my LcSettingLookupBool}

    as I understand:

    $setting LookupBool $name == ::tcllcconfig::LcSettingC::MK_NULL LookupBool in
    problem: post versa pre parse expression
    problem: the fileName(class etc) is *not* available


    ==== lcconfig-2-0-5-(0-0-0+binary+pipe+tcl.pipe.pipe) use invalid cfs FAILED ---- Result was:
    (client-0-0-0) [ServiceCallError] <Tok|2E3A471B{LcSettingRpc::LookupBool}> <Num|1>
    (server-0-0-0) [tcl_mqmsgque_ServiceCall] 'LcSettingC' hdl is NULL
    while executing
    "$setting LookupBool $name"
    (class "::LibLcConfigRpcServer" method "LcSettingLookupBool" line 4)
    invoked from within
    "::oo::Obj40::my LcSettingLookupBool"
    (client-0-0-0) | 871 | send_mq.c | MqSendEND_AND_WAIT_RT (client-0-0-0) | 508 | high_lng.h | $ctx Send 'W' ... '2E3A471B{LcSettingRpc::LookupBool}:HC@O' ...
    (client-0-0-0) | 522 | high_lng.h | $ctx Send... (client-0-0-0) | 75 | ~KernelRpcClient.tcl | my Send $typ $fmt {*}$args
    (client-0-0-0) | 588 | ~ConfigRpcClient.tcl | $rpc send "W" "2E3A471B{LcSettingRpc::LookupBool}:HC@O" $hdl $name
    (client-0-0-0) | 3 | lcconfig.test | $null LookupBool in (client-0-0-0) | 2405 | tcltest-2.5.3.tm | uplevel 1 $script (client-0-0-0) | 1 | lcconfig.test | ::tcltest::RunTest lcconfig-2-0-5-(0-0-0+binary+pipe+tcl.pipe.pipe) { ...
    (client-0-0-0) | 1651 | tcltest-2.5.3.tm | uplevel 1 $script (client-0-0-0) | 1 | lcconfig.test | ::tcltest::Eval {::tcltest::RunTest
    lcconfig-2-0-5-(0-0-0+binary+pipe+tcl.pipe.pipe) { ...
    (client-0-0-0) | 2021 | tcltest-2.5.3.tm | uplevel 1 [list [namespace origin Eval] $command 1]
    (client-0-0-0) | 87 | lcconfig.test | test lcconfig-2-0-5-($F+$B+$C+$S) { use invalid cfs } -constraints {$B
    eq "binary"} -setup { ...
    (client-0-0-0) | 6 | lcconfig.test | foreach F [handles] { ...
    (client-0-0-0) | 649 | library.tcl | uplevel $code (client-0-0-0) | 195 | lcconfig.test | Block 2 { ... (client-0-0-0) | 104 | lcconfig.test | foreach S [filter SRV_LST $C ] { ...
    (client-0-0-0) | 101 | lcconfig.test | foreach C [getEnv COM_LST] { ...
    (client-0-0-0) | 98 | lcconfig.test | foreach B [getEnv BIN_LST] { ...

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Harald Oehlmann@21:1/5 to All on Tue Nov 26 09:09:16 2024
    Hi,
    remark that "info errorstack" and the stack trace are different things.
    In the first, variable names are replaced by values.
    In the second, there are the variable names "$var".

    They don't match directly.

    THanks,
    Harald

    Am 25.11.2024 um 22:13 schrieb aotto1968:
    Hi,

    my goal is to transfer the "errorInfo" into a "stacktrace" used by my SW.

    I require: command, fileName and lineNumber
    the [info errorstack] return "something" which is missing some
    essential parts.

    [info errorstack]:
    INNER {invokeStk1 ::tcllcconfig::LcSettingC::MK_NULL LookupBool in}
    CALL {::oo::Obj40::my LcSettingLookupBool}

    as I understand:

    $setting LookupBool $name == ::tcllcconfig::LcSettingC::MK_NULL
    LookupBool in
    problem: post versa pre parse expression
    problem: the fileName(class etc) is *not* available


    ==== lcconfig-2-0-5-(0-0-0+binary+pipe+tcl.pipe.pipe) use invalid cfs
    FAILED
    ---- Result was:
    (client-0-0-0)   [ServiceCallError] <Tok|
    2E3A471B{LcSettingRpc::LookupBool}> <Num|1>
    (server-0-0-0)   [tcl_mqmsgque_ServiceCall] 'LcSettingC' hdl is NULL
        while executing
    "$setting LookupBool $name"
        (class "::LibLcConfigRpcServer" method "LcSettingLookupBool" line 4)
        invoked from within
    "::oo::Obj40::my LcSettingLookupBool"
    (client-0-0-0)     | 871   | send_mq.c            |
    MqSendEND_AND_WAIT_RT
    (client-0-0-0)     | 508   | high_lng.h           | $ctx Send 'W' ...
    '2E3A471B{LcSettingRpc::LookupBool}:HC@O' ...
    (client-0-0-0)     | 522   | high_lng.h           | $ctx Send...
    (client-0-0-0)     | 75    | ~KernelRpcClient.tcl | my Send $typ $fmt
    {*}$args
    (client-0-0-0)     | 588   | ~ConfigRpcClient.tcl | $rpc send "W"
    "2E3A471B{LcSettingRpc::LookupBool}:HC@O" $hdl $name
    (client-0-0-0)     | 3     | lcconfig.test        | $null LookupBool in
    (client-0-0-0)     | 2405  | tcltest-2.5.3.tm     | uplevel 1 $script
    (client-0-0-0)     | 1     | lcconfig.test
    | ::tcltest::RunTest lcconfig-2-0-5-(0-0-0+binary+pipe+tcl.pipe.pipe) { ...
    (client-0-0-0)     | 1651  | tcltest-2.5.3.tm     | uplevel 1 $script
    (client-0-0-0)     | 1     | lcconfig.test        | ::tcltest::Eval
    {::tcltest::RunTest lcconfig-2-0-5-(0-0-0+binary+pipe+tcl.pipe.pipe) { ...
    (client-0-0-0)     | 2021  | tcltest-2.5.3.tm     | uplevel 1 [list
    [namespace origin Eval] $command 1]
    (client-0-0-0)     | 87    | lcconfig.test        | test
    lcconfig-2-0-5-($F+$B+$C+$S) { use invalid cfs }  -constraints {$B eq "binary"}  -setup { ...
    (client-0-0-0)     | 6     | lcconfig.test        | foreach F
    [handles] { ...
    (client-0-0-0)     | 649   | library.tcl          | uplevel $code
    (client-0-0-0)     | 195   | lcconfig.test        | Block 2 { ...
    (client-0-0-0)     | 104   | lcconfig.test        | foreach S [filter
    SRV_LST $C ] { ...
    (client-0-0-0)     | 101   | lcconfig.test        | foreach C [getEnv
    COM_LST] { ...
    (client-0-0-0)     | 98    | lcconfig.test        | foreach B [getEnv
    BIN_LST] { ...

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From aotto1968@21:1/5 to Harald Oehlmann on Tue Nov 26 19:58:58 2024
    On 26.11.24 09:09, Harald Oehlmann wrote:
    Hi,
    remark that "info errorstack" and the stack trace are different things.
    In the first, variable names are replaced by values.
    In the second, there are the variable names "$var".

    They don't match directly.

    THanks,
    Harald


    This is funny because "errorInfo" and "errorStack" are written in the same proc "

    /*
    *----------------------------------------------------------------------
    *
    * TclLogCommandInfo --
    *
    * This function is invoked after an error occurs in an interpreter. It
    * adds information to iPtr->errorInfo/errorStack fields to describe the
    * command that was being executed when the error occurred. When pc and
    * tosPtr are non-NULL, conveying a bytecode execution "inner context",
    * and the offending instruction is suitable, that inner context is
    * recorded in errorStack.
    *
    * Results:
    * None.
    *
    * Side effects:
    * Information about the command is added to errorInfo/errorStack and the
    * line number stored internally in the interpreter is set.
    *
    *----------------------------------------------------------------------
    */

    and the "errorInfo" has a BETTER info than the "errorStack" ?

    I use to raise MY error in a my-error-raise-proc and I use [info frame..] to collect all
    the required data to build my-errorStack proper.

    The problem is the "errorStack" from OTHER software or from TCL self witch do NOT
    collect all the available Info.

    My question is simple:

    why someone program a [info errorstack ...] to provide an API for a missing feature and
    do NOT call all the data available from [info frame] ?

    TCL could have a wonderful "exception" interface

    1. The (Tcl_GetReturnOptions) dict is the "exception-object"
    > example:
    > Tcl_GetReturnOptions(interp,TCL_ERROR): -code 1 -level 0 -errorstack {INNER {invokeStk1
    ::tcllcconfig::LcSettingC::MK_NULL LookupBool in} CALL {::oo::Obj40::my LcSettingLookupBool}} -errorcode NONE -errorinfo
    {'LcSettingC' hdl is NULL
    > while executing
    > "$setting LookupBool $name"
    > (class "::LibLcConfigRpcServer" method "LcSettingLookupBool" line 4)
    > invoked from within
    > "::oo::Obj40::my LcSettingLookupBool"} -errorline 1
    2. The "-errorstack" key has the LIST of [info frame] dicts until catch

    everyone is happy

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ralf Fassel@21:1/5 to All on Wed Nov 27 10:29:54 2024
    * aotto1968 <[email protected]>
    | TCL could have a wonderful "exception" interface

    | 1. The (Tcl_GetReturnOptions) dict is the "exception-object"
    | > example:
    | > Tcl_GetReturnOptions(interp,TCL_ERROR): -code 1 -level 0
    | > -errorstack {INNER {invokeStk1
    | > ::tcllcconfig::LcSettingC::MK_NULL LookupBool in} CALL
    | > {::oo::Obj40::my LcSettingLookupBool}} -errorcode NONE
    | > -errorinfo
    | {'LcSettingC' hdl is NULL
    | > while executing
    | > "$setting LookupBool $name"
    | > (class "::LibLcConfigRpcServer" method "LcSettingLookupBool" line 4)
    | > invoked from within
    | > "::oo::Obj40::my LcSettingLookupBool"} -errorline 1
    | 2. The "-errorstack" key has the LIST of [info frame] dicts until catch

    | -> everyone is happy

    I guess your contribution to the TCL code base would probably be
    welcome, provided there is agreement on the necessity of this
    feature...

    https://core.tcl-lang.org/tips/doc/trunk/doc/help.md

    R'

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From aotto1968@21:1/5 to Ralf Fassel on Wed Nov 27 15:03:58 2024
    On 27.11.24 10:29, Ralf Fassel wrote:
    * aotto1968 <[email protected]>
    | TCL could have a wonderful "exception" interface

    | 1. The (Tcl_GetReturnOptions) dict is the "exception-object"
    | > example:
    | > Tcl_GetReturnOptions(interp,TCL_ERROR): -code 1 -level 0
    | > -errorstack {INNER {invokeStk1
    | > ::tcllcconfig::LcSettingC::MK_NULL LookupBool in} CALL
    | > {::oo::Obj40::my LcSettingLookupBool}} -errorcode NONE
    | > -errorinfo
    | {'LcSettingC' hdl is NULL
    | > while executing
    | > "$setting LookupBool $name"
    | > (class "::LibLcConfigRpcServer" method "LcSettingLookupBool" line 4)
    | > invoked from within
    | > "::oo::Obj40::my LcSettingLookupBool"} -errorline 1
    | 2. The "-errorstack" key has the LIST of [info frame] dicts until catch

    | -> everyone is happy

    I guess your contribution to the TCL code base would probably be
    welcome, provided there is agreement on the necessity of this
    feature...

    https://core.tcl-lang.org/tips/doc/trunk/doc/help.md

    R'

    The problem is always "time" … I work with a dozens of languages and TCL is just one of them…
    for example today I figured out how to implement this in python…

    def MkErrorC_FormatException(err,exp,caller):
    err.NoRaise().SetC(str(exp),caller)
    tb = exp.__traceback__
    while tb is not None:
    err.StackFormat(
    tb.tb_frame.f_code.co_qualname,
    tb.tb_frame.f_code.co_filename,
    tb.tb_lineno
    )
    tb = tb.tb_next

    and by-the-way I add a feature to direct "inject" python-code into a python-c-extension without
    shipping an extra python source file.

    → My problem is always NOT to drift-away into old-style-language-development…

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)