PikeDebugger
Work on permitting pike code to be debugged interactively is underway, and currently exists as a rough proof of concept in branch bill/debugger-concept.The minimum requirement to use the new Pike debugger is to have a pike that's been compiled with the --with-debug configure option. For best results, you'll also want to disable machine code generation in the interpreter. While debugging will work, the optimizations that occur in a pike compiled with machine code generation will often cause surprising code execution flows and the appearance some lines of code aren't executing at all.The debugger is built directly into the pike executable and its functionality runs within a separate thread. The debugger natively speaks the Debug Adapter Protocol (DAP), which is a language and runtime agnostic mecanism for communicating between a debugger and a user interface, such as an IDE.Once you have a pike compiled from the debugging branch with the appropriate build flags (described above), you can use VSCode as a debugging client using the following plugin. The readme has a good description of what to expect to work (and not). Comments and feedback are welcome!https://hg.sr.ht/~hww3/vscode-debugger-pikeCurrent features of the POC
$ pike --debugger --debugger-wait=5 --debugger-port=4711 /path/to/file.pike $ telnet localhost 3333 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Welcome to the Pike Debugger. > object bp = Debug.Debugger.add_breakpoint("/path/to/file.pike", 22); > object bp1 = Debug.Debugger.add_breakpoint("/path/to/file.pike", "/path/to/included_file.h", 2); > bp->enable(); > bp1->enable(); > go Breakpoint on /path/to/file.pike:22 > backtrace; (1) Result: ({ /* 4 elements */ backtrace_frame(/Users/hww3/pike2/build/darwin-16.7.0-x86_64/master.pike:4148, _main(), Args: 1), backtrace_frame(-:1, `()(), Args: 1), backtrace_frame(/path/to/file.pike:14, doit(), No args), backtrace_frame(/path/to/included_file.h:2, whee(), Args: 1) }) > backtrace[-1]->locals(); (4) Result: ({ /* 3 elements */ "rad", 0, 0 }) > backtrace[-1]->set_local(1, "bar"); (5) Result: 0 > backtrace[-1]->locals(); (6) Result: ({ /* 3 elements */ "rad", "bar", 0 }) > step Stepping. Breakpoint on /path/to/included_file.h:2 > go Powered by PikeWiki2 |
|||
gotpike.org | Copyright © 2004 - 2009 | Pike is a trademark of Department of Computer and Information Science, Linköping University |