6 Commits

Author SHA1 Message Date
Nick Fitzgerald 5c1557d24e Add docs and example for debugging with core dumps (#7087)
* Add docs for debugging with core dumps

* Fix reference to old style CLI flag

* Add `no_run` to example that is only there to trap
2023-09-26 17:55:45 +00:00
Alex Crichton 8995750aa4 Redesign Wasmtime's CLI (#6925)
* Redesign Wasmtime's CLI

This commit follows through on discussion from #6741 to redesign the
flags that the `wasmtime` binary accepts on the CLI. Almost all flags
have been renamed/moved and will require callers to update. The main
motivation here is to cut down on the forest of options in `wasmtime -h`
which are difficult to mentally group together and understand.

The main change implemented here is to move options behind "option
groups" which are intended to be abbreviated with a single letter:

* `-O foo` - an optimization or performance-tuning related option
* `-C foo` - a codegen option affecting the compilation process.
* `-D foo` - a debug-related option
* `-W foo` - a wasm-related option, for example changing wasm semantics
* `-S foo` - a WASI-related option, configuring various proposals for example

Each option group can be explored by passing `help`, for example `-O
help`. This will print all options within the group along with their
help message. Additionally `-O help-long` can be passed to print the
full comment for each option if desired.

Option groups can be specified multiple times on the command line, for
example `-Wrelaxed-simd -Wthreads`. They can also be combined together
with commas as `-Wrelaxed-simd,threads`. Configuration works as a "last
option wins" so `-Ccache,cache=n` would end up with a compilation
cache disabled.

Boolean options can be specified as `-C foo` to enable `foo`, or they
can be specified with `-Cfoo=$val` with any of `y`, `n`, `yes`, `no`,
`true`, or `false`. All other options require a `=foo` value to be
passed and the parsing depends on the type.

This commit additionally applies a few small refactorings to the CLI as
well. For example the help text no longer prints information about wasm
features after printing the option help. This is still available via
`-Whelp` as all wasm features have moved from `--wasm-features` to `-W`.
Additionally flags are no longer conditionally compiled in, but instead
all flags are always supported. A runtime error is returned if support
for a flag is not compiled in. Additionally the "experimental" name of
WASI proposals has been dropped in favor of just the name of the
proposal, for example `--wasi nn` instead of `--wasi-modules
experimental-wasi-nn`. This is intended to mirror how wasm proposals
don't have "experimental" in the name and an opt-in is required
regardless.

A full listing of flags and how they have changed is:

| old cli flag                                  | new cli flag                                    |
|-----------------------------------------------|-------------------------------------------------|
| `-O, --optimize`                              | removed                                         |
| `--opt-level <LEVEL>`                         | `-O opt-level=N`                                |
| `--dynamic-memory-guard-size <SIZE>`          | `-O dynamic-memory-guard-size=...`              |
| `--static-memory-forced`                      | `-O static-memory-forced`                       |
| `--static-memory-guard-size <SIZE>`           | `-O static-memory-guard-size=N`                 |
| `--static-memory-maximum-size <MAXIMUM>`      | `-O static-memory-maximum-size=N`               |
| `--dynamic-memory-reserved-for-growth <SIZE>` | `-O dynamic-memory-reserved-for-growth=...`     |
| `--pooling-allocator`                         | `-O pooling-allocator`                          |
| `--disable-memory-init-cow`                   | `-O memory-init-cow=no`                         |
| `--compiler <COMPILER>`                       | `-C compiler=..`                                |
| `--enable-cranelift-debug-verifier`           | `-C cranelift-debug-verifier`                   |
| `--cranelift-enable <SETTING>`                | `-C cranelift-NAME`                             |
| `--cranelift-set <NAME=VALUE>`                | `-C cranelift-NAME=VALUE`                       |
| `--config <CONFIG_PATH>`                      | `-C cache-config=..`                            |
| `--disable-cache`                             | `-C cache=no`                                   |
| `--disable-parallel-compilation`              | `-C parallel-compilation=no`                    |
| `-g`                                          | `-D debug-info`                                 |
| `--disable-address-map`                       | `-D address-map=no`                             |
| `--disable-logging`                           | `-D logging=no`                                 |
| `--log-to-files`                              | `-D log-to-files`                               |
| `--coredump-on-trap <PATH>`                   | `-D coredump=..`                                |
| `--wasm-features all`                         | `-W all-proposals`                              |
| `--wasm-features -all`                        | `-W all-proposals=n`                            |
| `--wasm-features bulk-memory`                 | `-W bulk-memory`                                |
| `--wasm-features multi-memory`                | `-W multi-memory`                               |
| `--wasm-features multi-value`                 | `-W multi-value`                                |
| `--wasm-features reference-types`             | `-W reference-types`                            |
| `--wasm-features simd`                        | `-W simd`                                       |
| `--wasm-features tail-call`                   | `-W tail-call`                                  |
| `--wasm-features threads`                     | `-W threads`                                    |
| `--wasm-features memory64`                    | `-W memory64`                                   |
| `--wasm-features copmonent-model`             | `-W component-model`                            |
| `--wasm-features function-references`         | `-W function-references`                        |
| `--relaxed-simd-deterministic`                | `-W relaxed-simd-deterministic`                 |
| `--enable-cranelift-nan-canonicalization`     | `-W nan-canonicalization`                       |
| `--fuel <N>`                                  | `-W fuel=N`                                     |
| `--epoch-interruption`                        | `-W epoch-interruption`                         |
| `--allow-unknown-exports`                     | `-W unknown-exports-allow`                      |
| `--trap-unknown-imports`                      | `-W unknown-imports-trap`                       |
| `--default-values-unknown-imports`            | `-W unknown-imports-default`                    |
| `--max-instances <MAX_INSTANCES>`             | `-W max-instances=N`                            |
| `--max-memories <MAX_MEMORIES>`               | `-W max-memories=N`                             |
| `--max-memory-size <BYTES>`                   | `-W max-memory-size=N`                          |
| `--max-table-elements <MAX_TABLE_ELEMENTS>`   | `-W max-table-elements=N`                       |
| `--max-tables <MAX_TABLES>`                   | `-W max-tables=N`                               |
| `--max-wasm-stack <MAX_WASM_STACK>`           | `-W max-wasm-stack=N`                           |
| `--trap-on-grow-failure`                      | `-W trap-on-grow-failure`                       |
| `--wasm-timeout <TIME>`                       | `-W timeout=N`                                  |
| `--wmemcheck`                                 | `-W wmemcheck`                                  |
| `--wasi-modules default`                      | removed                                         |
| `--wasi-modules -default`                     | removed                                         |
| `--wasi-modules wasi-common`                  | `-S common`                                     |
| `--wasi-modules -wasi-common`                 | `-S common=n`                                   |
| `--wasi-modules experimental-wasi-nn`         | `-S nn`                                         |
| `--wasi-modules experimental-wasi-threads`    | `-S threads`                                    |
| `--wasi-modules experimental-wasi-http`       | `-S http`                                       |
| `--listenfd`                                  | `-S listenfd`                                   |
| `--tcplisten <SOCKET ADDRESS>`                | `-S tcplisten=...`                              |
| `--wasi-nn-graph <FORMAT::HOST>`              | `-S nn-graph=FORMAT::HOST`                      |
| `--preview2`                                  | `-S preview2`                                   |
| `--dir <DIRECTORY>`                           | `--dir ...`                                     |
| `--mapdir <GUEST_DIR::HOST_DIR>`              | `--dir a::b`                                    |

* Be more descriptive with help text

* Document `=val` is optional for `-Ccranelift-xxx`

* Fix compile after rebase

* Fix rebase of `--inherit-network`

* Fix wasi-http test

* Fix compile without pooling allocator support

* Update some flags in docs

* Fix bench-api build

* Update flags for gdb/lldb tests

* Fixup optimization flags

prtest:full
2023-09-11 22:05:35 +00:00
SingleAccretion 9377dfd7b8 Add a note about _NO_DEBUG_HEAP to the debugging document (#6963)
While this is not at all WASM-specific, it is somewhat rare that
LLDB is used for native debugging on Windows, so the cause of
the slowdown on the order of 50x may not be immediately obvious.
2023-09-05 14:02:12 +00:00
Jeffrey Charles 28eef73aeb [Doc] Note where to find start of memory when debugging (#4420) 2022-07-08 13:23:00 -07:00
Andrew Brown a83497e0b0 [doc] Add LLDB tips and tricks 2021-07-09 15:45:28 -07:00
Andrew Brown e5d25bc216 [doc] Add some documentation for debugging
The previous documentation only covers how to enable debug info when
embedding Wasmtime. This change should cover the commonly-asked
question: how do I debug in Wasmtime?
2021-07-09 06:22:25 -07:00