我有一个很好的功能齐全的模块(使用tcl / cpp),它工作正常。
我想使用ramdebugger来调试使用该模块的脚本
当我进入
load mylib.so
command1_from_lib xx
command2_from lib yy
if(say)command2返回错误,然后ramdebugger死掉
[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运行时之间的链接。
答案 0 :(得分:1)
这听起来非常像我的错误,而不是这个网站可以回答的问题。您应该联系ramdebugger people,看看他们是否可以提供帮助。
但是,对于一般的Tcl调试,您还可以查看ActiveState生成的工具是否有帮助; IIRC您可以免费试用,看看他们是否可以取得任何进展。 (我自己,我是 put-lots-of - printf
- 在调试学校打电话,所以我不是小时候的孩子。)