Walter Erquinigo 541f22ee36
[lldb-dap] Support throw and catch exception breakpoints for dynamica… (#97871)
…lly registered languages

First of all, this is done to support exceptions for the Mojo language,
but it's done in a way that will benefit any other plugin language.

1. I added a new lldb-dap CLI argument (not DAP field) called
`pre-init-commands`. These commands are executed before DAP
initialization. The other `init-commands` are executed after DAP
initialization. It's worth mentioning that the debug adapter returns to
VSCode the list of supported exception breakpoints during DAP
initialization, which means that I need to register the Mojo plugin
before that initialization step, hence the need for `pre-init-commands`.
In general, language plugins should be registered in that step, as they
affect the capabilities of the debugger.
2. I added a set of APIs for lldb-dap to query information of each
language related to exception breakpoints. E.g. whether a language
supports throw or catch breakpoints, how the throw keyword is called in
each particular language, etc.
3. I'm realizing that the Swift support for exception breakpoints in
lldb-dap should have been implemented in this way, instead of hardcoding
it.
2024-07-10 19:05:38 -04:00

54 lines
1.8 KiB
TableGen

include "llvm/Option/OptParser.td"
class F<string name>: Flag<["--", "-"], name>;
class S<string name>: Separate<["--", "-"], name>;
class R<list<string> prefixes, string name>
: Option<prefixes, name, KIND_REMAINING_ARGS>;
def help: F<"help">,
HelpText<"Prints out the usage information for the lldb-dap tool.">;
def: Flag<["-"], "h">,
Alias<help>,
HelpText<"Alias for --help">;
def wait_for_debugger: F<"wait-for-debugger">,
HelpText<"Pause the program at startup.">;
def: Flag<["-"], "g">,
Alias<wait_for_debugger>,
HelpText<"Alias for --wait-for-debugger">;
def port: S<"port">,
MetaVarName<"<port>">,
HelpText<"Communicate with the lldb-dap tool over the defined port.">;
def: Separate<["-"], "p">,
Alias<port>,
HelpText<"Alias for --port">;
def launch_target: S<"launch-target">,
MetaVarName<"<target>">,
HelpText<"Launch a target for the launchInTerminal request. Any argument "
"provided after this one will be passed to the target. The parameter "
"--comm-file must also be specified.">;
def comm_file: S<"comm-file">,
MetaVarName<"<file>">,
HelpText<"The fifo file used to communicate the with the debug adaptor "
"when using --launch-target.">;
def debugger_pid: S<"debugger-pid">,
MetaVarName<"<pid>">,
HelpText<"The PID of the lldb-dap instance that sent the launchInTerminal "
"request when using --launch-target.">;
def repl_mode: S<"repl-mode">,
MetaVarName<"<mode>">,
HelpText<"The mode for handling repl evaluation requests, supported modes: variable, command, auto.">;
def pre_init_command: S<"pre-init-command">,
MetaVarName<"<command>">,
HelpText<"A command to execute before the DAP initialization request and "
"right after a Debugger has been created.">;
def: Separate<["-"], "c">,
Alias<pre_init_command>,
HelpText<"Alias for --pre-init-command">;