Questions about LiveBacktraceFrame

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Questions about LiveBacktraceFrame

H William Welliver
Hello all-

Given the following bttest.pike on a recent pike master, I get some unexpected behavior.

int main(int argc, array argv) {
mixed bt = backtrace(1)[(int)argv[1]]; 
write("%O\n", bt->fun); 
for(int i = 0; i < bt->num_locals; i++) 
  write("%O: %O\n", bt->get_local_name(i), bt->get_local(i));
return 0;
}

Run 1:
bin/pike bttest 0

master()->_main
"debugger": ({ /* 5 elements */
    "/Users/hww3/pikedbg/build/darwin-18.7.0-x86_64/pike",
    "-DPRECOMPILED_SEARCH_MORE",
    "-m/Users/hww3/pikedbg/build/darwin-18.7.0-x86_64/master.pike",
    "bttest",
    "0"
})
"argv": ({ /* 2 elements */
    "/Users/hww3/pikedbg/bttest",
    "0"
})
"debug": 0
"trace": 0
"run_tool": 0
"tmp": Getopt
"postparseaction": 0
"parts": 0
"i": master()->Version(8.1)
"have_debugger": 0
"debugger_wait": 0
"debugger_signal": 0
"debugger_port": 0
"t": /Users/hww3/pikedbg/bttest
"err": 0
"script": /Users/hww3/pikedbg/bttest()
"first_arg": int
0: 0
0: 0
0: 0
0: 0
0: 0
0: 0
0: 0
0: 0

Run 2:

bin/pike bttest 1

/main()->main
0: 2
0: ({ /* 2 elements */
    "/Users/hww3/pikedbg/bttest",
    "1"
})
"bt": _static_modules.Builtin()->LiveBacktraceFrame()
0: 3

Some questions:

1. It seems logical to me that out-of-scope locals have a local name of zero. However, it’s strange to me that function arguments, while treated as locals, don’t have names (see both examples). 
2. It’s also strange that the for-loop variable ‘i' doesn’t have a name. If I move the definition of ‘i’ ahead of the for loop, it does have a name.
3. The value of “debugger” from the first listing looks more like the value of orig_argv, which doesn’t appear elsewhere in the locals list. I also don’t seem to have a variable called “debugger” in my definition of “_main” (but there is a variable called “debugger” in the containing (master) object.

Am I doing something wrong in my use of these frames? I get similar strange behavior in the debugger itself, when the thread of the backtrace I’m examining is paused.

Bill