| 122 | } |
| 123 | |
| 124 | void gather_info(const char* expression, const char* description, const char* argument0, const char* argument1, const char* file, int line, const char* function, |
| 125 | char* assertion_info) |
| 126 | { |
| 127 | auto buffer = assertion_info; |
| 128 | auto endline = "\n"; |
| 129 | auto prefix = "[error]"; |
| 130 | bool extended_description = (description && !argument0 && strchr(description, '\n')); |
| 131 | for (int i = 0; i < 2; ++i) |
| 132 | { |
| 133 | if (!i) |
| 134 | buffer += sprintf(buffer, "%sFATAL ERROR%s%s", endline, endline, endline); |
| 135 | buffer += sprintf(buffer, "%sExpression : %s%s", prefix, expression, endline); |
| 136 | buffer += sprintf(buffer, "%sFunction : %s%s", prefix, function, endline); |
| 137 | buffer += sprintf(buffer, "%sFile : %s%s", prefix, file, endline); |
| 138 | buffer += sprintf(buffer, "%sLine : %d%s", prefix, line, endline); |
| 139 | |
| 140 | if (extended_description) |
| 141 | { |
| 142 | buffer += sprintf(buffer, "%s%s%s", endline, description, endline); |
| 143 | } |
| 144 | else |
| 145 | { |
| 146 | buffer += sprintf(buffer, "%sDescription : %s%s", prefix, description, endline); |
| 147 | if (argument0) |
| 148 | { |
| 149 | if (argument1) |
| 150 | { |
| 151 | buffer += sprintf(buffer, "%sArgument 0 : %s%s", prefix, argument0, endline); |
| 152 | buffer += sprintf(buffer, "%sArgument 1 : %s%s", prefix, argument1, endline); |
| 153 | } |
| 154 | else |
| 155 | buffer += sprintf(buffer, "%sArguments : %s%s", prefix, argument0, endline); |
| 156 | } |
| 157 | } |
| 158 | |
| 159 | buffer += sprintf(buffer, "%s", endline); |
| 160 | if (!i) |
| 161 | { |
| 162 | Log(assertion_info); |
| 163 | buffer = assertion_info; |
| 164 | endline = "\r\n"; |
| 165 | prefix = ""; |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | #ifdef USE_OWN_MINI_DUMP |
| 170 | buffer += sprintf(buffer, "See log file and minidump for detailed information\r\n"); |
| 171 | #else |
| 172 | buffer += sprintf(buffer, "See log file for detailed information\r\n"); |
| 173 | #endif |
| 174 | LogStackTrace("!!stack trace:\n"); |
| 175 | } |
| 176 | |
| 177 | void xrDebug::do_exit(const std::string& message) |
| 178 | { |
no test coverage detected