| ## Best Practices |
| |
| ### Runtime assertions |
| |
| Unopt builds use [FML_DCHECK](https://cs.opensource.google/flutter/flutter/+/main:engine/src/flutter/fml/logging.h?q=FML_DCHECK&ss=flutter%2Fflutter) to enable assertion checks across the engine repository. Assertions on dependencies like Dart VM or Skia are not enabled because local and CI builds would be extremely slow. |
| Unopt builds are not published or consumed by the flutter/flutter CI to run integration tests or benchmarks. |
| |
| ### Sanitizers |
| |
| [flutter/engine](https://github.com/flutter/flutter/tree/main/engine) supports thread, address, memory, undefined behavior and leak sanitizers. Sanitizers are not enabled by default but they can be enabled on local builds following the [sanitizers with the flutter engine](../engine/Using-Sanitizers-with-the-Flutter-Engine.md) instructions. |
| |
| ### Builds with sanitizers, and tests with assertions enabled |
| |
| [flutter/engine](https://github.com/flutter/flutter/tree/main/engine) runs automated builds with sanitizers and testing with assertions. Testing with assertions is enabled in all the supported platforms and sanitizers are enabled only on the Linux platform. |
| Sanitizer builds: |
| |
| * [Linux unopt](https://ci.chromium.org/p/flutter/builders/prod/Linux%20Unopt) |
| |
| Tests with assertions enabled: |
| |
| * [Linux unopt](https://ci.chromium.org/p/flutter/builders/prod/Linux%20Unopt) |
| * [Mac unopt](https://ci.chromium.org/p/flutter/builders/prod/Linux%20mac_unopt) |
| * [Windows unopt](https://ci.chromium.org/p/flutter/builders/prod/Windows%20Unopt) |