mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-12 18:03:13 +00:00
## About The Pull Request This refactors code related to debugger and byond-tracy `/datum/debugger` and `/datum/tracy` - which live in the `GLOBAL_REAL` vars `Debugger` and `Tracy` respectively. This allows code related to those two to be grouped together in their own files, rather than mashed into `world.dm` with a bunch of other shit - while it still initializes during the same stages of init. In addition, this also ports https://github.com/BeeStation/BeeStation-Hornet/pull/8947, which prints runtime errors to chat when the debugger is enabled. <details> <summary><h3>Proof of Testing</h3></summary>      </details> ## Why It's Good For The Game Reduces some `GLOB` pollution, and groups a bunch of related code into dedicated files and datums. It's simply cleaner. Printing runtime errors to chat is also very useful, as it allows you to see when shit is fuck, if you don't want a breakpoint pause for each error. ## Changelog 🆑 refactor: Refactored some code related to initialization. code: Runtime errors will now print to the chat while debugging. /🆑
65 lines
1.9 KiB
Plaintext
65 lines
1.9 KiB
Plaintext
/// The byond-tracy instance.
|
|
/// This is a GLOBAL_REAL because it is the VERY FIRST THING to initialize, even before the MC or GLOB.
|
|
GLOBAL_REAL(Tracy, /datum/tracy)
|
|
|
|
/datum/tracy
|
|
/// Is byond-tracy enabled and running?
|
|
VAR_FINAL/enabled = FALSE
|
|
/// The error text, if initializing byond-tracy errored.
|
|
VAR_FINAL/error
|
|
/// A description of what / who enabled byond-tracy.
|
|
VAR_FINAL/init_reason
|
|
/// A path to the file containing the output trace, if any.
|
|
VAR_FINAL/trace_path
|
|
|
|
/datum/tracy/New()
|
|
if(!isnull(Tracy))
|
|
CRASH("Attempted to initialize /datum/tracy when global.Tracy is already set!")
|
|
Tracy = src
|
|
|
|
/datum/tracy/Destroy()
|
|
#ifndef OPENDREAM_REAL
|
|
if(enabled)
|
|
call_ext(TRACY_DLL_PATH, "destroy")()
|
|
#endif
|
|
return ..()
|
|
|
|
/// Tries to initialize byond-tracy.
|
|
/datum/tracy/proc/enable(init_reason)
|
|
#ifndef OPENDREAM_REAL
|
|
if(enabled)
|
|
return TRUE
|
|
src.init_reason = init_reason
|
|
if(!fexists(TRACY_DLL_PATH))
|
|
error = "[TRACY_DLL_PATH] not found"
|
|
SEND_TEXT(world.log, "Error initializing byond-tracy: [error]")
|
|
return FALSE
|
|
|
|
var/init_result = call_ext(TRACY_DLL_PATH, "init")("block")
|
|
if(length(init_result) != 0 && init_result[1] == ".") // if first character is ., then it returned the output filename
|
|
SEND_TEXT(world.log, "byond-tracy initialized (logfile: [init_result])")
|
|
enabled = TRUE
|
|
return TRUE
|
|
else if(init_result == "already initialized") // not gonna question it.
|
|
enabled = TRUE
|
|
SEND_TEXT(world.log, "byond-tracy already initialized ([trace_path ? "logfile: [trace_path]" : "no logfile"])")
|
|
return TRUE
|
|
else if(init_result != "0")
|
|
error = init_result
|
|
SEND_TEXT(world.log, "Error initializing byond-tracy: [init_result]")
|
|
return FALSE
|
|
else
|
|
enabled = TRUE
|
|
SEND_TEXT(world.log, "byond-tracy initialized (no logfile)")
|
|
return TRUE
|
|
#else
|
|
error = "OpenDream not supported"
|
|
return FALSE
|
|
#endif
|
|
|
|
/datum/tracy/vv_edit_var(var_name, var_value)
|
|
return FALSE // no.
|
|
|
|
/datum/tracy/CanProcCall(procname)
|
|
return FALSE // double no.
|