Extend and document compiler debugging utilities (#19841)
* Add two debugutils procs that native debuggers can break on use to execute commands when code of interest is being compiled. * Add GDB and LLDB programs to disable and enable breakpoints and watchpoints when code of interest is being compiled. * Extend the `intern.rst` docs regarding debugging the compiler. Co-authored-by: quantimnot <quantimnot@users.noreply.github.com>
This commit is contained in:
parent
1e5dd9022b
commit
6f4bacff67
5 changed files with 281 additions and 39 deletions
39
tools/compiler.gdb
Normal file
39
tools/compiler.gdb
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
# create a breakpoint on `debugutils.enteringDebugSection`
|
||||
define enable_enteringDebugSection
|
||||
break -function enteringDebugSection
|
||||
# run these commands once breakpoint enteringDebugSection is hit
|
||||
command
|
||||
# enable all breakpoints and watchpoints
|
||||
enable
|
||||
# continue execution
|
||||
cont
|
||||
end
|
||||
end
|
||||
|
||||
# create a breakpoint on `debugutils.exitingDebugSection` named exitingDebugSection
|
||||
define enable_exitingDebugSection
|
||||
break -function exitingDebugSection
|
||||
# run these commands once breakpoint exitingDebugSection is hit
|
||||
command
|
||||
# disable all breakpoints and watchpoints
|
||||
disable
|
||||
# but enable the enteringDebugSection breakpoint
|
||||
enable_enteringDebugSection
|
||||
# continue execution
|
||||
cont
|
||||
end
|
||||
end
|
||||
|
||||
# some commands can't be set until the process is running, so set an entry breakpoint
|
||||
break -function NimMain
|
||||
# run these commands once breakpoint NimMain is hit
|
||||
command
|
||||
# disable all breakpoints and watchpoints
|
||||
disable
|
||||
# but enable the enteringDebugSection breakpoint
|
||||
enable_enteringDebugSection
|
||||
# no longer need this breakpoint
|
||||
delete -function NimMain
|
||||
# continue execution
|
||||
cont
|
||||
end
|
||||
40
tools/compiler.lldb
Normal file
40
tools/compiler.lldb
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# create a breakpoint on `debugutils.enteringDebugSection` named enteringDebugSection
|
||||
breakpoint set -n 'enteringDebugSection' -N enteringDebugSection
|
||||
# run these commands once breakpoint enteringDebugSection is hit
|
||||
breakpoint command add enteringDebugSection
|
||||
# enable all breakpoints
|
||||
breakpoint enable
|
||||
# enable all watchpoints
|
||||
# watchpoint enable # FIXME: not currently working for unknown reason
|
||||
# continue execution
|
||||
continue
|
||||
DONE
|
||||
|
||||
# create a breakpoint on `debugutils.exitingDebugSection` named exitingDebugSection
|
||||
breakpoint set -n 'exitingDebugSection' -N exitingDebugSection
|
||||
# run these commands once breakpoint exitingDebugSection is hit
|
||||
breakpoint command add exitingDebugSection
|
||||
# disable all breakpoints
|
||||
breakpoint disable
|
||||
# disable all watchpoints
|
||||
# watchpoint disable # FIXME: not currently working for unknown reason
|
||||
breakpoint enable enteringDebugSection
|
||||
# continue execution
|
||||
continue
|
||||
DONE
|
||||
|
||||
# some commands can't be set until the process is running, so set an entry breakpoint
|
||||
breakpoint set -n NimMain -N NimMain
|
||||
# run these commands once breakpoint NimMain is hit
|
||||
breakpoint command add NimMain
|
||||
# disable all breakpoints
|
||||
breakpoint disable
|
||||
# disable all watchpoints
|
||||
# watchpoint disable # FIXME: not currently working for unknown reason
|
||||
# enable the enteringDebugSection breakpoint though
|
||||
breakpoint enable enteringDebugSection
|
||||
# no longer need this breakpoint
|
||||
breakpoint delete NimMain
|
||||
# continue execution
|
||||
continue
|
||||
DONE
|
||||
Loading…
Add table
Add a link
Reference in a new issue