102 lines
3.4 KiB
Markdown
102 lines
3.4 KiB
Markdown
# Debugging
|
|
|
|
## Inspecting re-frame with re-frisk
|
|
`re-frisk` is a state visualization tool written by our very own Andrey (@flexsurfer). With its help you can inspect the current state of app-db, watch event, etc.
|
|
|
|
![re-frisk](images/debugging/re-frisk.png)
|
|
|
|
To start `re-frisk`, execute the following command:
|
|
```bash
|
|
$ yarn shadow-cljs run re-frisk-remote.core/start
|
|
```
|
|
|
|
or you can also use make:
|
|
|
|
```bash
|
|
$ make run-re-frisk
|
|
```
|
|
|
|
A server will be started at http://localhost:4567. It might show "not connected" at first. Don't worry and just start using the app. The events and state will populate.
|
|
|
|
More details about re-frisk are on the [project page](https://github.com/flexsurfer/re-frisk).
|
|
|
|
## Enabling debug logs
|
|
Calls to `log/debug` will not be printed to the console by default. It can be enabled under "Advanced settings" in the app:
|
|
|
|
![Enable Debug Logs](images/debugging/log-settings.png)
|
|
|
|
|
|
## Checking status-go logs
|
|
While status mobile works it saves logs from `status-go` to `geth.log` file.
|
|
|
|
|
|
### Checking logs from physical device
|
|
To obtain `geth.log` from physical device you need to shake it and in an opened menu select "Share logs".
|
|
|
|
![Share logs](images/debugging/share-logs.jpeg)
|
|
|
|
|
|
### Checking logs from iOS Simulator
|
|
When developing with iOS simulator it is more convenient to see the `geth.log` updates in real-time.
|
|
To do this:
|
|
- open Activity Monitor
|
|
- find the "StatusIm" app and doubleclick it
|
|
- in the opened window select "Open files and ports" and find the full path to `geth.log` (note that it won't appear until you login to Status app)
|
|
|
|
![geth.log path](images/debugging/geth-path.png)
|
|
|
|
## Inspecting database content
|
|
|
|
Encrypted database can be found using commands:
|
|
```
|
|
cd ~/Library/Developer/CoreSimulator/Devices
|
|
find ./ -name accounts.sql
|
|
```
|
|
|
|
To get unencrypted database you need to export it first:
|
|
- open the status app in simulator
|
|
- on login screen enter the correct password without logging in
|
|
- using repl execute statement to export db:
|
|
```
|
|
(re-frame.core/dispatch [:multiaccounts.login.ui/export-db-submitted])
|
|
```
|
|
- save generated `export.db` file
|
|
|
|
Now you can locate the `export.db` and open it with preferred db viewer.
|
|
|
|
**Android:**
|
|
|
|
```sh
|
|
adb root
|
|
adb pull /storage/emulated/0/Android/data/im.status.ethereum.debug/files/Download/export.db /path/to/store/export.db
|
|
```
|
|
|
|
If you're using a release build, change the path to `/storage/emulated/0/Android/data/im.status.ethereum/files/Download`
|
|
|
|
**iOS**
|
|
|
|
```
|
|
cd ~/Library/Developer/CoreSimulator/Devices
|
|
find ./ -name export.db
|
|
```
|
|
|
|
|
|
|
|
## Tips
|
|
### From @ilmotta:
|
|
|
|
Something I find extremely convenient for Android is to use `adb` to tail logs. I don't use macOS so I don't know if the iOS simulator offers a CLI interface with the same capabilities.
|
|
|
|
But here's what I use for example:
|
|
|
|
```
|
|
adb shell tail -n 10 -f /storage/emulated/0/Android/data/im.status.ethereum.debug/files/Download/geth.log | grep 'waku.relay'
|
|
```
|
|
|
|
Also to inspect logs in a more flexible manner, instead of the strict output from `make run-metro`, I prefer `adb logcat`. Combined with enabling status-mobile logs in debug by default plus filtering the logs to only what I care during development, I find this helps me inspect the app without running re-frisk because with the debug log level I can already see which events are dispatched (one of the features I like the most from re-frisk).
|
|
|
|
```
|
|
adb logcat | grep 'ReactNativeJS\|StatusModule\|GoLog'
|
|
```
|
|
|