ramdebugger 和 tcl/c++ 出现问题可加载模块
我有一个很好的功能齐全的模块(使用 tcl/cpp 编写),它工作得很好。
我想使用 ramdebugger 来调试使用该模块的脚本
当我输入
load mylib.so
command1_from_lib xx
command2_from lib yy
If (say) command2 returns an error then ramdebugger dies
[paul@paul-es5 ramdebugger7.7.1]$ ./ramdebugger
alloc: invalid block: 0x999c058: 0 0
Aborted
它在 libtcl / ResetObjResult 中死去
if ((objResultPtr->bytes != NULL)
&& (objResultPtr->bytes != tclEmptyStringRep)) {
ckfree((char *) objResultPtr->bytes);
}
我怀疑全局 tclEmptyStringRep 存在混淆。我认为 starkitted(?) ramdebugger 有一个,动态加载的 libtcl 有一个不同的 - 字节指针逻辑上应该指向一个空字符串,但那里的值与 gdb 显示的全局值不匹配
我是一个 tcl noob 并且需要我能得到的任何帮助。或者,对不同调试器的建议将起作用
编辑:修复
使用 tclStub 推迟扩展和 tcl 运行时之间的链接。
I have a nice fully functioning module (wrtten using tcl/cpp) it works fine.
I want to use ramdebugger to debug scripts using that module
When I enter
load mylib.so
command1_from_lib xx
command2_from lib yy
If (say) command2 returns an error then ramdebugger dies
[paul@paul-es5 ramdebugger7.7.1]$ ./ramdebugger
alloc: invalid block: 0x999c058: 0 0
Aborted
It dies here in libtcl / ResetObjResult
if ((objResultPtr->bytes != NULL)
&& (objResultPtr->bytes != tclEmptyStringRep)) {
ckfree((char *) objResultPtr->bytes);
}
My suspicion is there is confusion over the global tclEmptyStringRep. I think the starkitted(?) ramdebugger has one and the dynamically loaded libtcl has a different one - the bytes pointer should logically be pointing to an empty string but the value there does not match what gdb shows for the global
I am a tcl noob and need any help I can get. Alternatively a suggestion for a different debugger would work
edit: fixed
Use tclStub to defer the link between the extension and the tcl runtime.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对我来说,这听起来很像一个错误,而不是这个网站可以回答的问题。您应该联系 ramdebugger 人员,看看他们是否可以提供帮助。
然而,对于一般的 Tcl 调试,您还可以查看 ActiveState 生成的工具是否有帮助; IIRC 您可以免费试用,看看他们是否能取得任何进展。 (我本人是调试学校的 put-lots-of-
printf
-calls 成员,所以我不是任何人的典型代表。)This sounds very much like a bug to me, as opposed to a question which this site can answer. You should contact the ramdebugger people to see if they can help.
However, for general Tcl debugging you could also see if the tools produced by ActiveState help; IIRC you can get a free trial to see if they can make any headway. (Myself, I'm of the put-lots-of-
printf
-calls in school of debugging, so I'm nobody's poster child.)