From 6e9cac3b32d894197f22867e74d1e0b7d4486955 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sun, 23 Aug 2026 08:31:39 +0000 Subject: [PATCH] Trace record stack frames under an env gate --- .../libraries/core-types/src/registry.rs | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/node-graph/libraries/core-types/src/registry.rs b/node-graph/libraries/core-types/src/registry.rs index 94efd85d35..c78e0c278d 100644 --- a/node-graph/libraries/core-types/src/registry.rs +++ b/node-graph/libraries/core-types/src/registry.rs @@ -151,15 +151,43 @@ where // over-released frame. #[cfg(debug_assertions)] let sp_before = crate::record::stack::sp(); + #[cfg(debug_assertions)] + let trace = { + static TRACE: std::sync::OnceLock = std::sync::OnceLock::new(); + *TRACE.get_or_init(|| std::env::var_os("GRAPHENE_SP_DEBUG").is_some()) + }; + #[cfg(debug_assertions)] + if trace { + eprintln!( + "sp> enter frame_bytes {} fields [{}] sp {}", + self.layout().frame_bytes(), + self.layout().fields.iter().map(|field| field.name.to_string()).collect::>().join(", "), + sp_before, + ); + } // SAFETY: `own` keeps the payload alive for `self`'s lifetime and Arc // payloads are address stable. let result = unsafe { self.ptr.as_ref() }.eval(input); #[cfg(debug_assertions)] + if trace { + eprintln!("sp> exit frame_bytes {} sp {} -> {}", self.layout().frame_bytes(), sp_before, crate::record::stack::sp()); + } + #[cfg(debug_assertions)] debug_assert_eq!( crate::record::stack::sp(), sp_before + self.layout().frame_bytes(), - "{} left the record stack misaligned", + "{} left the record stack misaligned (frame_bytes {}, depth {}, fields [{}], poll {})", std::any::type_name::(), + self.layout().frame_bytes(), + self.layout().depth, + self.layout().fields.iter().map(|field| field.name.to_string()).collect::>().join(", "), + match &result { + crate::gpoll::GPoll::Final(_) => "Final", + crate::gpoll::GPoll::Partial(_) => "Partial", + crate::gpoll::GPoll::Fallback(_) => "Fallback", + crate::gpoll::GPoll::Pending => "Pending", + crate::gpoll::GPoll::Error(_) => "Error", + }, ); result }