<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<