<2023-11-08 Wed>
emacs源码分析(四)
在调试emacs源码时一个使用gdb的小技巧:如果要查看一个Lisp_Symbol结构体变量中名称的字符串可以这么来,比如这个0xdd70就是一个Lisp_Symbol变量,它对应的名称字符串是"top-level",如下:
(gdb) p XSTRING(XSYMBOL(0xdd70).u.s.name).u.s.data
$8 = (unsigned char *) 0x100a6c4c3 <o_fwd+15843> "top-level"
(gdb) macro define sym_name(lisp_obj) XSTRING(XSYMBOL(lisp_obj).u.s.name).u.s.data
(gdb) p sym_name(0xdd70)
$9 = (unsigned char *) 0x100a6c4c3 <o_fwd+15843> "top-level"
(gdb) macro exp sym_name(Lisp_Object)
expands to: XSTRING(XSYMBOL(Lisp_Object).u.s.name).u.s.data
需要解释一下的话:
XSYMBOL从Lisp_Object中获得Lisp_Symbol,Lisp_Symbol的u.s.name里存放着Lisp_Object。XSTRING从Lisp_Object里获得Lisp_String,Lisp

最低0.47元/天 解锁文章
2117

被折叠的 条评论
为什么被折叠?



