status-mobile/doc/debugging.md

3.4 KiB

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

To start re-frisk, execute the following command:

$ yarn shadow-cljs run re-frisk-remote.core/start

or you can also use make:

$ 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.

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

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

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

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:

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'