ramdebugger 和 tcl/c++ 出现问题可加载模块

发布于 2024-09-16 08:22:06 字数 816 浏览 2 评论 0原文

我有一个很好的功能齐全的模块(使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雪若未夕 2024-09-23 08:22:06

对我来说,这听起来很像一个错误,而不是这个网站可以回答的问题。您应该联系 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.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文