【问题标题】:Debugging glib/gtree in lldb在 lldb 中调试 glib/gtree
【发布时间】:2020-10-10 00:09:23
【问题描述】:

显然,由于我喜欢自虐,我正在 yacc/lex/glib/c 中编写一个 BASIC 解释器。 BASIC 程序存储为GLists 的数组,数组中的每个条目代表源代码中的一行。每一行都是statement_ts 的GList,在原文中用冒号隔开。

我正在尝试调试一个我认为是由不正确构建的 GList 引起的奇怪问题,但我是 lldb 中的 C 新手,所以我不清楚如何将它拆开:

(lldb) p ps->parms._if.then_expression
(GList *) $0 = 0x0000000100704b60
(lldb) po ps->parms._if.then_expression
0x0000000100704b60
(lldb) p (statement_t *)ps->parms._if.then_expression.data
(statement_t *) $0 = 0x00000001014040c0
  Fix-it applied, fixed expression was: 
    (statement_t *)ps->parms._if.then_expression->data

then_expression 是满足条件时要运行的 statement_t 的 GList。我的代码总是只运行这些语句中的第一个,忽略其余的,这让我相信我的 .next 指针是错误的。但是怎么讲?一切都只是一个指针。

我假设我必须将其转换为语句_t 我对语法迷路了,examples that I find 没有用处。

【问题讨论】:

  • 不,真正的自虐会用 BASIC 写 yacc/lex :-)

标签: lldb glib


【解决方案1】:

打印出 next 指针而不是 data 指针以查看它指向的位置,或者打印出 GList 结构本身:p *((GList*)ps->parms._if.then_expression

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多