Skip to content
This repository was archived by the owner on Aug 18, 2025. It is now read-only.

Commit 660ca56

Browse files
committed
新增 CodeNothing v0.7.4 调试配置模块,提供细粒度的调试输出控制,支持多种调试选项的启用与禁用,提升调试便利性。
1 parent ff410ba commit 660ca56

File tree

1 file changed

+233
-0
lines changed

1 file changed

+233
-0
lines changed

src/debug_config.rs

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
// CodeNothing v0.7.4 调试配置模块
2+
// 提供细粒度的调试输出控制
3+
4+
use std::sync::atomic::{AtomicBool, Ordering};
5+
6+
/// 全局调试配置
7+
pub struct DebugConfig {
8+
/// 是否启用JIT编译调试输出
9+
pub jit_debug: AtomicBool,
10+
/// 是否启用生命周期分析调试输出
11+
pub lifetime_debug: AtomicBool,
12+
/// 是否启用表达式求值调试输出
13+
pub expression_debug: AtomicBool,
14+
/// 是否启用函数调用调试输出
15+
pub function_debug: AtomicBool,
16+
/// 是否启用变量访问调试输出
17+
pub variable_debug: AtomicBool,
18+
/// 是否启用所有调试输出
19+
pub all_debug: AtomicBool,
20+
}
21+
22+
impl DebugConfig {
23+
/// 创建默认配置(所有调试输出关闭)
24+
pub fn new() -> Self {
25+
Self {
26+
jit_debug: AtomicBool::new(false),
27+
lifetime_debug: AtomicBool::new(false),
28+
expression_debug: AtomicBool::new(false),
29+
function_debug: AtomicBool::new(false),
30+
variable_debug: AtomicBool::new(false),
31+
all_debug: AtomicBool::new(false),
32+
}
33+
}
34+
35+
/// 启用JIT调试输出
36+
pub fn enable_jit_debug(&self) {
37+
self.jit_debug.store(true, Ordering::Relaxed);
38+
}
39+
40+
/// 禁用JIT调试输出
41+
pub fn disable_jit_debug(&self) {
42+
self.jit_debug.store(false, Ordering::Relaxed);
43+
}
44+
45+
/// 检查是否启用JIT调试输出
46+
pub fn is_jit_debug_enabled(&self) -> bool {
47+
self.jit_debug.load(Ordering::Relaxed) || self.all_debug.load(Ordering::Relaxed)
48+
}
49+
50+
/// 启用生命周期分析调试输出
51+
pub fn enable_lifetime_debug(&self) {
52+
self.lifetime_debug.store(true, Ordering::Relaxed);
53+
}
54+
55+
/// 禁用生命周期分析调试输出
56+
pub fn disable_lifetime_debug(&self) {
57+
self.lifetime_debug.store(false, Ordering::Relaxed);
58+
}
59+
60+
/// 检查是否启用生命周期分析调试输出
61+
pub fn is_lifetime_debug_enabled(&self) -> bool {
62+
self.lifetime_debug.load(Ordering::Relaxed) || self.all_debug.load(Ordering::Relaxed)
63+
}
64+
65+
/// 启用表达式求值调试输出
66+
pub fn enable_expression_debug(&self) {
67+
self.expression_debug.store(true, Ordering::Relaxed);
68+
}
69+
70+
/// 禁用表达式求值调试输出
71+
pub fn disable_expression_debug(&self) {
72+
self.expression_debug.store(false, Ordering::Relaxed);
73+
}
74+
75+
/// 检查是否启用表达式求值调试输出
76+
pub fn is_expression_debug_enabled(&self) -> bool {
77+
self.expression_debug.load(Ordering::Relaxed) || self.all_debug.load(Ordering::Relaxed)
78+
}
79+
80+
/// 启用函数调用调试输出
81+
pub fn enable_function_debug(&self) {
82+
self.function_debug.store(true, Ordering::Relaxed);
83+
}
84+
85+
/// 禁用函数调用调试输出
86+
pub fn disable_function_debug(&self) {
87+
self.function_debug.store(false, Ordering::Relaxed);
88+
}
89+
90+
/// 检查是否启用函数调用调试输出
91+
pub fn is_function_debug_enabled(&self) -> bool {
92+
self.function_debug.load(Ordering::Relaxed) || self.all_debug.load(Ordering::Relaxed)
93+
}
94+
95+
/// 启用变量访问调试输出
96+
pub fn enable_variable_debug(&self) {
97+
self.variable_debug.store(true, Ordering::Relaxed);
98+
}
99+
100+
/// 禁用变量访问调试输出
101+
pub fn disable_variable_debug(&self) {
102+
self.variable_debug.store(false, Ordering::Relaxed);
103+
}
104+
105+
/// 检查是否启用变量访问调试输出
106+
pub fn is_variable_debug_enabled(&self) -> bool {
107+
self.variable_debug.load(Ordering::Relaxed) || self.all_debug.load(Ordering::Relaxed)
108+
}
109+
110+
/// 启用所有调试输出
111+
pub fn enable_all_debug(&self) {
112+
self.all_debug.store(true, Ordering::Relaxed);
113+
}
114+
115+
/// 禁用所有调试输出
116+
pub fn disable_all_debug(&self) {
117+
self.all_debug.store(false, Ordering::Relaxed);
118+
self.jit_debug.store(false, Ordering::Relaxed);
119+
self.lifetime_debug.store(false, Ordering::Relaxed);
120+
self.expression_debug.store(false, Ordering::Relaxed);
121+
self.function_debug.store(false, Ordering::Relaxed);
122+
self.variable_debug.store(false, Ordering::Relaxed);
123+
}
124+
125+
/// 从命令行参数解析调试配置
126+
pub fn from_args(&self, args: &[String]) {
127+
for arg in args {
128+
match arg.as_str() {
129+
"--debug-jit" => self.enable_jit_debug(),
130+
"--debug-lifetime" => self.enable_lifetime_debug(),
131+
"--debug-expression" => self.enable_expression_debug(),
132+
"--debug-function" => self.enable_function_debug(),
133+
"--debug-variable" => self.enable_variable_debug(),
134+
"--debug-all" => self.enable_all_debug(),
135+
"--no-debug" => self.disable_all_debug(),
136+
_ => {}
137+
}
138+
}
139+
}
140+
141+
/// 打印调试配置状态
142+
pub fn print_status(&self) {
143+
println!("=== CodeNothing v0.7.4 调试配置状态 ===");
144+
println!("JIT编译调试: {}", if self.is_jit_debug_enabled() { "启用" } else { "禁用" });
145+
println!("生命周期分析调试: {}", if self.is_lifetime_debug_enabled() { "启用" } else { "禁用" });
146+
println!("表达式求值调试: {}", if self.is_expression_debug_enabled() { "启用" } else { "禁用" });
147+
println!("函数调用调试: {}", if self.is_function_debug_enabled() { "启用" } else { "禁用" });
148+
println!("变量访问调试: {}", if self.is_variable_debug_enabled() { "启用" } else { "禁用" });
149+
println!("所有调试: {}", if self.all_debug.load(Ordering::Relaxed) { "启用" } else { "禁用" });
150+
println!("=====================================");
151+
}
152+
}
153+
154+
/// 全局调试配置实例
155+
static DEBUG_CONFIG: std::sync::OnceLock<DebugConfig> = std::sync::OnceLock::new();
156+
157+
/// 获取全局调试配置
158+
pub fn get_debug_config() -> &'static DebugConfig {
159+
DEBUG_CONFIG.get_or_init(|| DebugConfig::new())
160+
}
161+
162+
/// 初始化调试配置
163+
pub fn init_debug_config(args: &[String]) {
164+
let config = get_debug_config();
165+
config.from_args(args);
166+
}
167+
168+
/// JIT调试输出宏
169+
#[macro_export]
170+
macro_rules! jit_debug_println {
171+
($($arg:tt)*) => {
172+
if $crate::debug_config::get_debug_config().is_jit_debug_enabled() {
173+
println!($($arg)*);
174+
}
175+
};
176+
}
177+
178+
/// 生命周期调试输出宏
179+
#[macro_export]
180+
macro_rules! lifetime_debug_println {
181+
($($arg:tt)*) => {
182+
if $crate::debug_config::get_debug_config().is_lifetime_debug_enabled() {
183+
println!($($arg)*);
184+
}
185+
};
186+
}
187+
188+
/// 表达式调试输出宏
189+
#[macro_export]
190+
macro_rules! expression_debug_println {
191+
($($arg:tt)*) => {
192+
if $crate::debug_config::get_debug_config().is_expression_debug_enabled() {
193+
println!($($arg)*);
194+
}
195+
};
196+
}
197+
198+
/// 函数调试输出宏
199+
#[macro_export]
200+
macro_rules! function_debug_println {
201+
($($arg:tt)*) => {
202+
if $crate::debug_config::get_debug_config().is_function_debug_enabled() {
203+
println!($($arg)*);
204+
}
205+
};
206+
}
207+
208+
/// 变量调试输出宏
209+
#[macro_export]
210+
macro_rules! variable_debug_println {
211+
($($arg:tt)*) => {
212+
if $crate::debug_config::get_debug_config().is_variable_debug_enabled() {
213+
println!($($arg)*);
214+
}
215+
};
216+
}
217+
218+
/// 打印调试帮助信息
219+
pub fn print_debug_help() {
220+
println!("CodeNothing v0.7.4 调试选项:");
221+
println!(" --debug-jit 启用JIT编译调试输出");
222+
println!(" --debug-lifetime 启用生命周期分析调试输出");
223+
println!(" --debug-expression 启用表达式求值调试输出");
224+
println!(" --debug-function 启用函数调用调试输出");
225+
println!(" --debug-variable 启用变量访问调试输出");
226+
println!(" --debug-all 启用所有调试输出");
227+
println!(" --no-debug 禁用所有调试输出");
228+
println!();
229+
println!("示例:");
230+
println!(" ./CodeNothing program.cn --debug-jit");
231+
println!(" ./CodeNothing program.cn --debug-lifetime --debug-jit");
232+
println!(" ./CodeNothing program.cn --debug-all");
233+
}

0 commit comments

Comments
 (0)