зеркало из https://github.com/mozilla/gecko-dev.git
71 строка
1.9 KiB
Markdown
71 строка
1.9 KiB
Markdown
# Servo debugging guide
|
|
|
|
There are a few ways to debug Servo. `mach` supports a `--debug` flag that
|
|
searches a suitable debugger for you and runs servo with the appropriate
|
|
arguments under it:
|
|
|
|
```
|
|
./mach run --debug test.html
|
|
```
|
|
|
|
You can also specify an alternative debugger using the `--debugger` flag:
|
|
|
|
```
|
|
./mach run --debugger=my-debugger test.html
|
|
```
|
|
|
|
You can also, of course, run directly your debugger on the Servo binary:
|
|
|
|
```
|
|
$ gdb --args ./target/debug/servo test.html
|
|
```
|
|
|
|
## Debugging SpiderMonkey.
|
|
|
|
You can build Servo with a debug version of SpiderMonkey passing the
|
|
`--debug-mozjs` flag to `./mach build`.
|
|
|
|
Note that this sometimes can cause problems when an existing build exists, so
|
|
you might have to delete the `mozjs` build directory, or run `./mach clean`
|
|
before your first `--debug-mozjs` build.
|
|
|
|
## Debugging Servo with [rr][rr].
|
|
|
|
To record a trace under rr you can either use:
|
|
|
|
```
|
|
$ ./mach run --debugger=rr testcase.html
|
|
```
|
|
|
|
Or:
|
|
|
|
```
|
|
$ rr record ./target/debug/servo testcase.html
|
|
```
|
|
|
|
### Running WPT tests under rr's chaos mode.
|
|
|
|
Matt added a mode to Servo's testing commands to record traces of Servo running
|
|
a test or set of tests until the result is unexpected.
|
|
|
|
To use this, you can pass the `--chaos` argument to `mach test-wpt`:
|
|
|
|
```
|
|
$ ./mach test-wpt --chaos path/to/test
|
|
```
|
|
|
|
Note that for this to work you need to have `rr` in your `PATH`.
|
|
|
|
Also, note that this might generate a lot of traces, so you might want to delete
|
|
them when you're done. They're under `$HOME/.local/share/rr`.
|
|
|
|
### Known gotchas
|
|
|
|
If you use a Haswell processor that supports Hardware Lock Ellision, rr might
|
|
not work for you. There's a `rr` [bug][rr-bug] open about this. Until that gets
|
|
fixed, you can ensure that the `parking_lot` dependency isn't built with the
|
|
`nightly` feature, which as of this writing is the only dependency that uses it.
|
|
|
|
[rr]: http://rr-project.org/
|
|
[rr-bug]: https://github.com/mozilla/rr/issues/1883
|