2
0
Эх сурвалжийг харах

Merge pull request #18644 from xsellier/bugfix/no-stacktract-on-android

Android - Crash log misses file name, function name, line number and details
Juan Linietsky 7 жил өмнө
parent
commit
356c1381b5

+ 29 - 0
platform/android/os_android.cpp

@@ -202,6 +202,11 @@ void OS_Android::print(const char *p_format, ...) {
 	va_end(argp);
 }
 
+void OS_Android::printfatal(const char *cond, const char *p_error_type, const char *p_function, const char *p_err_details, const char *p_file, int p_line) {
+
+	__android_log_assert(cond, "godot", "%s exception: %s: %s(%s:%i)\n", p_error_type, p_function, p_err_details, p_file, p_line);
+}
+
 void OS_Android::alert(const String &p_alert, const String &p_title) {
 
 	print("ALERT: %s\n", p_alert.utf8().get_data());
@@ -764,6 +769,30 @@ bool OS_Android::is_joy_known(int p_device) {
 	return input->is_joy_mapped(p_device);
 }
 
+void OS_Android::print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type) {
+	const char *err_details;
+	if (p_rationale && p_rationale[0])
+		err_details = p_rationale;
+	else
+		err_details = p_code;
+
+	switch (p_type) {
+		case ERR_ERROR:
+			printfatal(NULL, "Error", p_function, err_details, p_file, p_line);
+			break;
+
+		case ERR_WARNING:
+			print("WARNING: %s: %s\n", p_function, err_details);
+			print("   At: %s:%i\n", p_file, p_line);
+			break;
+
+		case ERR_SCRIPT:
+			printfatal(NULL, "Script error", p_function, err_details, p_file, p_line);
+
+			break;
+	}
+}
+
 String OS_Android::get_joy_guid(int p_device) const {
 	return input->get_joy_guid_remapped(p_device);
 }

+ 2 - 0
platform/android/os_android.h

@@ -180,8 +180,10 @@ public:
 
 	static OS *get_singleton();
 
+	void print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, ErrorType p_type);
 	virtual void vprint(const char *p_format, va_list p_list, bool p_stderr = false);
 	virtual void print(const char *p_format, ...);
+	virtual void printfatal(const char *cond, const char *p_error_type, const char *p_function, const char *p_err_details, const char *p_file, int p_line);
 	virtual void alert(const String &p_alert, const String &p_title = "ALERT!");
 
 	virtual void set_mouse_show(bool p_show);