Files
flipper/docs/extending/error-handling.md
John Knox b3ec8b052b Add Setup and Extending top level navs
Summary: Distinguish between integrating flipper, and developing plugins.

Reviewed By: passy

Differential Revision: D15148448

fbshipit-source-id: 7c772fa1cea7d5ed789a984039afc37bc0b8a927
2019-04-30 11:06:45 -07:00

1.8 KiB

id, title
id title
error-handling Error Handling

Errors in Flipper plugins should be hidden from the user while providing actionable data to the plugin developer.

Android

To gracefully handle errors in Flipper we provide the ErrorReportingRunnable class. This is a custom runnable which catches all exceptions, stopping them from crashing the application and reporting them to the plugin developer.

new ErrorReportingRunnable(mConnection) {
  @Override
  public void runOrThrow() throws Exception {
    mightThrowException();
  }
}.run();

Executing this block of code will always finish without error but may transfer any silences error to the Flipper desktop app. During plugin development these java stack traces are surfaced in the chrome dev console. In production the errors are instead sent to and a task is assigned so that you can quickly deploy a fix.

Always use ErrorReportingRunnable for error handling instead of try/catch or even worse letting errors crash the app. With ErrorReportingRunnable you won't block anyone and you won't hide any stack traces.

C++

To gracefully handle errors in Flipper we perform all transactions inside of a try block which catches all exceptions, stopping them from crashing the application and reporting them to the plugin developer. This includes your own customs implementations of FlipperPlugin::didConnect() and FlipperConnection::send() and ::receive()!

That means you can safely throw exceptions in your plugin code. The exception messages will be sent to the Flipper desktop app. During plugin development the exception messages are surfaced in the Chrome dev console.

If your plugin performs asynchronous work in which exceptions are thrown, these exceptions will not be caught by the Flipper infrastructure. You should handle them appropriately.