【发布时间】:2019-11-01 11:18:13
【问题描述】:
在 TCL 8.6.9 上,我尝试使用 TCL_MEM_DEBUG 来帮助诊断我的应用程序中的内存泄漏,但是在使用/启用它时我遇到了崩溃。
相同的代码在没有它的情况下编译 TCL 时运行良好,但在我使用标志时崩溃。
TCL调用函数“Tcl_ResetResult->ResetObjResult->Tcl_IsShared(Tcl_DbIsShared in debug)”时代码崩溃。
在执行“Tcl_Eval()”时发生。
(这是一个多线程的应用程序(解释器))。
谢谢
更多信息: 这发生在在 DLL 中创建的线程中。因此,当从 TCL 加载 DLL 时,我们在这里执行的操作是创建一个新的 TCL 解释器(Tcl_CreateInterp),然后创建一个使用该解释器的新线程。 其他线程(使用自己的解释器)将命令发送到执行它们的线程。这是发生此崩溃的时间。
【问题讨论】:
-
在内存调试模式下,实现检查是否遵循线程局部性规则(除其他外)。是否有与崩溃相关的错误消息(即是有序的恐慌还是无序的彻底崩溃)?
-
您好,Donal,我不确定您的问题(恐慌或彻底)。但它确实以“恐慌”告终,说“未创建表对象”。没有把握。我现在不在工作,但明天早上我会得到确切的错误。
-
确切的行是 "Tcl_Panic("object table not initialized");"在函数“Tcl_DbIsShared()”中。
-
这里有一些解决方案/提示的希望吗?谢谢