mirror of https://github.com/boa-dev/boa.git
Jason Williams
5 years ago
2 changed files with 53 additions and 1 deletions
@ -0,0 +1,48 @@ |
|||||||
|
# Debugging |
||||||
|
|
||||||
|
There are multiple ways to debug what Boa is doing. Or maybe you just want to know how it works under the hood. Or even test some javaScript. |
||||||
|
|
||||||
|
The first thing i usually do is add some JS [here](../tests/js/test.js). |
||||||
|
This file will be read if no arguments are provided. Then boa will begin to parse and execute that JS. |
||||||
|
|
||||||
|
These are added in order of how the code is read: |
||||||
|
|
||||||
|
## Tokens |
||||||
|
|
||||||
|
The first thing boa will do is generate tokens from source code. |
||||||
|
If the token generation is wrong the rest of the operation will be wrong, this is usually a good starting place. |
||||||
|
|
||||||
|
Navigate to `parser_expr` in [lib.rs](../src/lib/lib.rs#L48) and add `dbg!(&tokens);` just below tokens to see the array of token output. You code should look like this: |
||||||
|
|
||||||
|
```rust |
||||||
|
let mut lexer = Lexer::new(src); |
||||||
|
lexer.lex().expect("lexing failed"); |
||||||
|
let tokens = lexer.tokens; |
||||||
|
dbg!(&tokens); |
||||||
|
... |
||||||
|
``` |
||||||
|
|
||||||
|
Seeing the order of tokens can be a big help to understanding what the parser is working with. |
||||||
|
|
||||||
|
## Expressions |
||||||
|
|
||||||
|
Assuming the tokens looks fine, the next step is to see the AST. |
||||||
|
You can output the expressions in [forward](../src/lib/lib.rs#L57), add `dbg!(&expr);` |
||||||
|
This will print out the entire parse tree. |
||||||
|
|
||||||
|
## Execution |
||||||
|
|
||||||
|
Once the tree has been generated [exec](../src/lib/exec.rs#L66) will begin to run through each expression. If the tokens and tree looks fine, you can start looking here. |
||||||
|
I usually just add `dbg!()` in the relevent places to see what the output is at the time. |
||||||
|
|
||||||
|
## Debugger |
||||||
|
|
||||||
|
### VS Code Debugger |
||||||
|
|
||||||
|
The quickest way to get debugging is to re-open the workspace in the container (using the Dockerfile provided). This is using the [Remote Containers plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers). Once inside make sure you have the CodeLLDB extension installed and add breakpoints. |
||||||
|
|
||||||
|
### LLDB Manually |
||||||
|
|
||||||
|
You can also use rust-lldb. |
||||||
|
The `Dockerfile` already has this enabled, you should be able to use that environment to run your code. |
||||||
|
`rust-lldb ./target/debug/boa [arguments]` |
Loading…
Reference in new issue