首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正在尝试减少在另一个线程中分配的Tcl_Obj的引用计数

正在尝试减少在另一个线程中分配的Tcl_Obj的引用计数
EN

Stack Overflow用户
提问于 2019-05-16 01:36:12
回答 1查看 168关注 0票数 1

我编译了sourceforge tcl可执行文件,它通过了提供的所有测试,并且运行时使用的段错误与我在下载的可执行文件8.6.9中看到的段错误相同。我在AMD处理器上运行Ubuntu16.04(出于遗留原因)。(我在我的笔记本电脑上运行了ubuntu 18.04,它也有同样的故障。)

因此,接下来我重新编译并打开了"--enable-symbols=mem“,以查看是否是内存泄漏导致了段故障,现在它立即失败了,并显示:

代码语言:javascript
运行
复制
Trying to decr ref count of Tcl_Obj allocated in another thread
./runMeg.sh: line 3: 29972 Aborted (core dumped) ../source/main_megatron.

我没有看到任何关于如何处理这个响应的答案,有人能告诉我这意味着我需要修复什么吗?

我所有的线程都是这样的:

代码语言:javascript
运行
复制
set graphDisplayThread [ thread::create {
  after [expr {int(1000) }]
  .....
  puts "...Initialized graphDisplayUpdate_02 ID $c update."
  thread::wait
  }]

和:

代码语言:javascript
运行
复制
thread::send  $::graphDisplayThread { 
   incr b
   graphDisplayUpdate .c 
   }       

所有共享变量都是在捕获互斥后通过TSV变量引用的。应用程序中有5个线程,其中根本没有C代码。总共大约2000行代码。

该应用程序运行数千个周期,然后在之前的ActiveState 8.6.9预编译版本中在随机点出现分段故障。因此,现在我试图通过编译的SourceForge 8.6.9内存检查来隔离故障点,作为第一步,但上面的问题是我遇到的第一个问题-它在启动后立即发生。

更新(5/16/19 8:28 EST):回答以下评论的新详细信息...这个应用程序中没有C代码,并且Tcl_Obj错误只出现在基于sourceForge的8.6.9编译中(2)我自己做的,而不是ActiveState 8.6.9预建下载。sourceForge代码中的错误出现在我同时创建并测试的两个"MEM_DEBUG“和非”MEM_DEBUG“构建中。两者都通过了所有安装测试。

总结一下:

代码语言:javascript
运行
复制
sourceForge 8.6.9 compile w/MEM_DEBUG option:   Tcl_Obj Abort error 
sourceForge 8.6.9 compile w/o MEM_DEBUG option: Tcl_Obj Abort error
ActiveState 8.6.9 build:                    does not Abort, random seg fault   

为什么我应该相信我自己做的sourceForge构建,而不是没有问题的ActiveState预构建可执行文件?如果我们确实信任sourceForge编译后的版本,那么如何隔离TclObject错误是由违规的TCL代码创建的呢?

更新5/16/19@13:34EST: Ubuntu18.04上的ActiveState 8.6.9也出现了相同的段错误。我还没有检查过我的SourceForge版本,看看它们是如何运行的。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56154861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档