【问题标题】:LLDB prints `i8` as "signed char"LLDB 将 `i8` 打印为 \"signed char\"
【发布时间】:2022-10-24 06:05:24
【问题描述】:

我正在使用LLDB extension for VSCode,我输入为i8 的变量打印为字符。无论是在 VSCode 调试面板中,还是在调试器控制台中使用 print 时。

变量定义如下:

for y in 0..self.height

self.heighti8

我找到了How do I make the Xcode debugger show uint8_t values as numbers?,但即使尝试添加一个fromat:type format add -f decimal int8_tprint y 仍然输出(signed char) $5 = '\a' 而不是(让我参考一下C转义序列和ascii图表......)7

【问题讨论】:

  • @PitaJ 究竟是什么解决方案?我似乎无法在那个线程中找到它。
  • 那里的答案说尝试使用 rust-analyzer 扩展来生成启动配置文件。
  • 这里有几件事。 (1) 需要注意的是,lldb 对 Rust 的支持主要是告诉 lldb,Rust 就像 C++ 一样,它应该使用 C++ 类型系统和表达式解析器。正如你所发现的那样,这只是一种工作。
  • 但是类型格式化程序匹配只是与类型名称进行比较的字符串。格式化程序匹配所具有的唯一语言智能是 lldb 将对 typedef 链的所有元素应用匹配。但匹配只是类型名称上的字符串或正则表达式匹配。因此,如果您希望格式化程序匹配打印为“i8”的类型,那么您应该将字符串提供给类型格式化程序。

标签: visual-studio-code rust lldb


【解决方案1】:

如果其他人遇到这种情况,这可能有用:

frame variable --format d y

该变量将打印为d 指示的“十进制”。可以在此处找到所有格式的列表(AFAIK):https://lldb.llvm.org/use/variable.html#id1

经过进一步的跟踪和错误,我想出了如何以十进制格式格式化所有“签名字符”,至少对于当前会话:

type format add --format d 'signed char'

这将在调试控制台中打印变量时起作用,并且它还将立即更新 VSCode 调试面板中的值。

如果有人知道如何获得这种持久性,甚至更好,请告诉 LLDB 该类型实际上是不是一个字符但一个整数,请告诉我。

【讨论】:

    【解决方案2】:

    我知道该线程已有几个月的历史,但我遇到了同样的问题。我设法通过 UI 转到 CodeLLDB 的扩展设置,并在 Pre Run Commands 下添加命令来修复它。出于某种原因,它也无法通过 launch.json 为我工作。

    对于我刚刚添加的用例:

    type format add --format u 'unsigned char'

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2013-09-23
      • 2012-10-23
      • 1970-01-01
      相关资源
      最近更新 更多