`InitRpmalloc` 对于在分析会话结束后仍然存在的线程不起作用
作者: ccp-serpent创建于 2025年2月28日更新于 2026年8月18日
使用 TRACY_ON_DEMAND 和 TRACY_MANUAL_LIFETIME。 如果在一个进程的生命周期内多次通过 `tracy::ShutdownProfiler()` 和 `tracy:StartupProfiler` 启动和关闭分析器,那么任何线程在第一个分析器会话中超过生命周期后进入第二个会话,在通过 `___tracy_alloc_srcloc` 进行仪器化时就会导致崩溃。 通过阅读源代码,似乎这是由于分析器关闭期间对每个线程的 `_memory_thread_heap` 对象进行的释放造成的。 由于堆初始化状态由线程本地存储管理,因此具有已释放内存的线程无法在调用 `InitRpmalloc` 时识别其支持堆是否已被释放。 我不确定是否存在能够支持上述用例的解决方案,通过阅读源代码我至少找不到一个。 如果有读者对此有进一步的见解,我会很感兴趣。 我想建议使用全局共享状态而不是线程本地存储来跟踪线程是否具有正确初始化的支持堆。
内容来源: wolfpld/tracy