我想要一个格式化程序为buildin字符串类型的nim语言,但不知何故我无法提供它。稔compilis到c,和字符串类型的C表现你在这里看到:为一个大小的字符串类型声明一个lldb汇总字符串
#if defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER)
# define SEQ_DECL_SIZE /* empty is correct! */
#else
# define SEQ_DECL_SIZE 1000000
#endif
typedef char NIM_CHAR;
typedef long long int NI64;
typedef NI64 NI;
struct TGenericSeq {NI len; NI reserved; };
struct NimStringDesc {TGenericSeq Sup; NIM_CHAR data[SEQ_DECL_SIZE]; };
,这里是什么,我在LLDB会议试图输出:
(lldb) frame variable *longstring
(NimStringDesc) *longstring = {
Sup = (len = 9, reserved = 15)
data = {}
}
(lldb) frame variable longstring->data
(NIM_CHAR []) longstring->data = {}
(lldb) type summary add --summary-string "${&var[0]%s}" "NIM_CHAR []"
(lldb) frame variable longstring->data
(NIM_CHAR []) longstring->data = {}
(lldb) type summary add --summary-string "${var%s}" "NIM_CHAR *"
(lldb) frame variable longstring->data
(NIM_CHAR []) longstring->data = {}
(lldb) frame variable &longstring->data[0]
(NIM_CHAR *) &[0] = 0x00007ffff7f3a060 "9 - 3 - 2"
(lldb) frame variable *longstring
(lldb) type summary add --summary-string "${var.data%s}" "NimStringDesc"
(lldb) frame variable *longstring
(NimStringDesc) *longstring = NIM_CHAR [] @ 0x7ffff7f3a060
(lldb) type summary add --summary-string "${&var.data[0]%s}" "NimStringDesc"
(lldb) frame variable *longstring
(NimStringDesc) *longstring = {
Sup = (len = 9, reserved = 15)
data = {}
}
(lldb)
我根本就”牛逼管理,输出将只是数据解释为'\0'
结尾的C字符串
感谢您的回答,这真的帮了我很多。我会尽快尝试一下。但是在你已经访问了Sup成员之后,你正在检查'data'的地址是否为'0'。数据的地址永远不会是'0',因为字符串是在Sup之后直接嵌入的,它不是一个指针。 – Arne
听起来像一个公平点。那么,随意调整。 –
我保持原样,因为这是我在Stackoverflow上得到的最好的答案,非常感谢。一切正常,而且很好解释。 – Arne