Files
Bubberstation/code/modules/debugging/debugger.dm
Lucy d653870a91 Refactor debugger and byond-tracy init (#90288)
## 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>

![2025-03-27 (1743094986) ~
Code](https://github.com/user-attachments/assets/2678542f-8338-4ca8-9435-e0376da9e80a)
![2025-03-27 (1743095425) ~
Code](https://github.com/user-attachments/assets/35a1c454-c176-4fb9-987b-82eb92f0fd31)
![2025-03-27 (1743095936) ~
dreamseeker](https://github.com/user-attachments/assets/49f607dc-c684-4fd9-8271-a287f2341c52)
![2025-03-27 (1743096001) ~
Code](https://github.com/user-attachments/assets/8cca692c-6253-48e8-9994-beff39211078)
![2025-03-27 (1743096351) ~
dreamseeker](https://github.com/user-attachments/assets/43a993dd-3884-4709-94fc-d072ff97a337)

</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.
/🆑
2025-04-02 17:38:49 -04:00

55 lines
1.5 KiB
Plaintext

/// The debugger instance.
/// This is a GLOBAL_REAL because it initializes before the MC or GLOB.
/// Really only used to check to see if the debugger is enabled or not,
/// and to separate debugger-related code into its own thing.
GLOBAL_REAL(Debugger, /datum/debugger)
/datum/debugger
/// Is the debugger enabled?
VAR_FINAL/enabled = FALSE
/// The error text, if initializing the debugger errored.
VAR_FINAL/error
/// The path to the auxtools debug DLL, if it sets.
/// Defaults to the environmental variable AUXTOOLS_DEBUG_DLL.
VAR_FINAL/dll_path
/datum/debugger/New(dll_path)
if(!isnull(Debugger))
CRASH("Attempted to initialize /datum/debugger when global.Debugger is already set!")
Debugger = src
#ifndef OPENDREAM_REAL
src.dll_path = dll_path || world.GetConfig("env", "AUXTOOLS_DEBUG_DLL")
enable()
#endif
/datum/debugger/Destroy()
#ifndef OPENDREAM_REAL
if(enabled)
call_ext(dll_path, "auxtools_shutdown")()
#endif
return ..()
/// Attempt to enable the debugger.
/datum/debugger/proc/enable()
#ifndef OPENDREAM_REAL
if(enabled)
CRASH("Attempted to enable debugger while its already enabled, somehow.")
if(!dll_path)
return FALSE
var/result = call_ext(dll_path, "auxtools_init")()
if(result != "SUCCESS")
error = result
return FALSE
enable_debugging()
enabled = TRUE
return TRUE
#else
return FALSE
#endif
/datum/debugger/vv_edit_var(var_name, var_value)
return FALSE // no.
/datum/debugger/CanProcCall(procname)
return FALSE // double no.