Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
assert.cc
Go to the documentation of this file.
1// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#include "platform/assert.h"
6
7#include "include/dart_api.h"
8#include "platform/globals.h"
9#include "platform/syslog.h"
10
11#if defined(DART_HOST_OS_ANDROID)
12extern "C" __attribute__((weak)) void android_set_abort_message(const char*);
13#endif // defined(DART_HOST_OS_ANDROID)
14
15namespace dart {
16
17bool Expect::failed_ = false;
18
20 va_list arguments,
21 bool will_abort /* = false */) const {
22 // Take only the last 1KB of the file name if it is longer.
23 const intptr_t file_len = strlen(file_);
24 const intptr_t file_offset = (file_len > (1 * KB)) ? file_len - (1 * KB) : 0;
25 const char* file = file_ + file_offset;
26
27 // Print the file and line number into the buffer.
28 char buffer[4 * KB];
29 MSAN_UNPOISON(buffer, sizeof(buffer));
30 intptr_t file_and_line_length =
31 snprintf(buffer, sizeof(buffer), "%s: %d: error: ", file, line_);
32
33 // Print the error message into the buffer.
34 vsnprintf(buffer + file_and_line_length,
35 sizeof(buffer) - file_and_line_length, format, arguments);
36
37 // Print the buffer on stderr and/or syslog.
38 Syslog::PrintErr("%s\n", buffer);
39#if defined(DART_HOST_OS_ANDROID)
40 if (will_abort && (&android_set_abort_message != nullptr)) {
41 android_set_abort_message(buffer);
42 }
43#endif // defined(DART_HOST_OS_ANDROID)
44}
45
46void Assert::Fail(const char* format, ...) const {
47 va_list arguments;
48 va_start(arguments, format);
49 Print(format, arguments, /*will_abort=*/true);
50 va_end(arguments);
51
52 // Abort right away.
55 abort();
56}
57
58void Expect::Fail(const char* format, ...) const {
59 va_list arguments;
60 va_start(arguments, format);
61 Print(format, arguments);
62 va_end(arguments);
63
64 // Wait until the program is exiting before producing a non-zero exit
65 // code through abort.
66 failed_ = true;
67}
68
69} // namespace dart
DART_NORETURN void Fail(const char *format,...) const PRINTF_ATTRIBUTE(2
Definition assert.cc:46
const char *const file_
Definition assert.h:37
void Print(const char *format, va_list arguments, bool will_abort=false) const
Definition assert.cc:19
void Fail(const char *format,...) const PRINTF_ATTRIBUTE(2
Definition assert.cc:58
static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
static const uint8_t buffer[]
uint32_t uint32_t * format
__attribute__((visibility("default"))) int RunBenchmarks(int argc
#define MSAN_UNPOISON(ptr, len)
DART_EXPORT void Dart_PrepareToAbort()
constexpr intptr_t KB
Definition globals.h:528
DART_EXPORT void Dart_DumpNativeStackTrace(void *context)