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:
quantimnot 2022-06-10 14:40:08 -04:00 • committed by GitHub
commit 6f4bacff67
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 281 additions and 39 deletions

39
tools/compiler.gdb Normal file
View 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
View 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