Pixel-Composer/scripts/debug/debug.gml

134 lines
3.6 KiB
Text
Raw Normal View History

2023-02-14 02:51:14 +01:00
#region counter
globalvar DEBUG_COUNTER;
DEBUG_COUNTER = ds_map_create();
2023-03-05 07:16:44 +01:00
function __debug_counter(key) {
2023-02-14 02:51:14 +01:00
if(ds_map_exists(DEBUG_COUNTER, key))
DEBUG_COUNTER[? key]++;
else
DEBUG_COUNTER[? key] = 1;
print(key + ": " + string(DEBUG_COUNTER[? key]));
}
#endregion
function _log_template() {
2023-11-05 04:19:19 +01:00
gml_pragma("forceinline");
2023-07-25 20:12:40 +02:00
return $"{current_year}/{current_month}/{current_day} {string_lead_zero(current_hour, 2)}:{string_lead_zero(current_minute, 2)}:{string_lead_zero(current_second, 2)} > ";
}
2023-06-17 14:30:49 +02:00
function __log(title, str, fname = "log/log.txt") {
var path = DIRECTORY + fname;
var f = file_text_open_append(path);
var t = _log_template();
file_text_write_string(f, $"{title}{t}{str}\n");
2022-01-13 05:24:03 +01:00
file_text_close(f);
}
2023-04-10 20:02:59 +02:00
function log_message(title, str, icon = noone, flash = false, write = true) {
2023-06-17 18:59:20 +02:00
if(TEST_ERROR) return;
2023-04-10 20:02:59 +02:00
if(write) __log("[MESSAGE] ", string(title) + ": " + string(str));
2022-11-14 03:16:15 +01:00
2023-01-17 08:11:55 +01:00
return noti_status(string(title) + ": " + string(str), icon, flash);
2022-01-13 05:24:03 +01:00
}
2023-06-17 18:59:20 +02:00
function log_warning(title, str, ref = noone) {
if(TEST_ERROR) return;
2022-11-14 03:16:15 +01:00
__log("[WARNING] ", string(title) + ": " + string(str));
2023-01-25 06:49:00 +01:00
return noti_warning(string(title) + ": " + string(str),, ref);
2022-01-13 05:24:03 +01:00
}
function log_crash(str) {
2023-06-17 18:59:20 +02:00
if(TEST_ERROR) return;
2022-01-13 05:24:03 +01:00
__log("[ERROR] ", string(str));
2022-11-14 03:16:15 +01:00
2022-12-22 03:09:55 +01:00
return noti_error(string(str));
2022-01-13 05:24:03 +01:00
}
function log_newline() {
2023-06-17 14:30:49 +02:00
var path = DIRECTORY + "log/log.txt";
2023-04-21 19:08:10 +02:00
var f = file_text_open_write(path);
2022-01-13 05:24:03 +01:00
file_text_writeln(f);
file_text_close(f);
}
function log_clear() {
2023-06-17 14:30:49 +02:00
var path = DIRECTORY + "log/log.txt";
if(file_exists(path))
file_delete(path);
}
2022-12-22 03:09:55 +01:00
function exception_print(e) {
2023-05-03 21:42:17 +02:00
if(!is_struct(e) || !struct_has(e, "longMessage")) return string(e);
2023-01-01 02:06:02 +01:00
var str = "\n\n========== Crash log ==========\n\n" + e.longMessage;
str += "\n\n========== Stack trace ==========\n\n";
2022-12-22 03:09:55 +01:00
2023-07-25 20:12:40 +02:00
for( var i = 0, n = array_length(e.stacktrace); i < n; i++ )
2022-12-22 03:09:55 +01:00
str += e.stacktrace[i] + "\n"
2023-01-01 02:06:02 +01:00
str += "\n\n========= Crash log end =========\n";
2022-12-22 03:09:55 +01:00
return str;
}
2023-02-19 02:13:19 +01:00
function setException() {
exception_unhandled_handler(function(ex) {
var path = string(DIRECTORY) + "prev_crash.pxc";
2023-07-06 19:49:16 +02:00
if(!SAVING && !TESTING) SAVE_AT(PROJECT, path);
2023-02-14 02:51:14 +01:00
2023-02-19 02:13:19 +01:00
var tt = "\n-------------------------- OH NO --------------------------\n\n";
tt += "\n" + ex.longMessage;
tt += "\n" + ex.script;
tt += "\n-------------------------- STACK TRACE --------------------------\n\n";
2023-07-25 20:12:40 +02:00
for( var i = 0, n = array_length(ex.stacktrace); i < n; i++ ) {
2023-02-19 02:13:19 +01:00
tt += ex.stacktrace[i] + "\n";
}
tt += "\n---------------------------- :( ----------------------------\n";
2023-06-17 14:30:49 +02:00
var path = DIRECTORY + "log/crash_log.txt";
2023-02-19 02:13:19 +01:00
file_text_write_all(path, tt);
clipboard_set_text(tt);
show_debug_message(tt);
2023-06-17 14:30:49 +02:00
ExecProcessFromArgVAsync(GetArgVFromProcid(ProcIdFromSelf())); //create new dialog
2023-02-19 02:13:19 +01:00
return 0;
});
}
2023-03-11 01:40:17 +01:00
//setException();
2023-02-19 02:13:19 +01:00
function resetException() {
exception_unhandled_handler(undefined);
2023-08-01 11:16:23 +02:00
}
function printCallStack(maxDepth = 32) {
var stack = debug_get_callstack(maxDepth);
print($"Call Stack:");
for( var i = 2, n = array_length(stack) - 1; i < n; i++ ) {
var call = stack[i];
var sp = string_splice(call, ":");
if(array_length(sp) < 2) continue;
sp[0] = string_replace_all(sp[0], "anon_", "");
sp[0] = string_split(sp[0], "gml_", true);
for( var j = 0, m = array_length(sp[0]); j < m; j++ ) {
sp[0][j] = string_replace(sp[0][j], "GlobalScript_", "Global: ");
sp[0][j] = string_replace(sp[0][j], "Script_", "Script: ");
sp[0][j] = string_replace(sp[0][j], "Object_", "Object: ");
sp[0][j] = string_trim(sp[0][j], ["_"]);
var _txt = "";
repeat(j * 4) _txt += " ";
_txt += $" > {sp[0][j]}";
if(j == m - 1)
_txt += $" line: {sp[1]}";
print(_txt);
}
}
print("")
2023-02-19 02:13:19 +01:00
}