【问题标题】:GDB: how to print content of register at specific address?GDB:如何打印特定地址的寄存器内容?
【发布时间】:2020-10-23 10:37:07
【问题描述】:

我正在尝试获取我的 adc 寄存器的内容以进行调试,但我不知道如何使用 gdb 打印它。如果地址寄存器偏移量是0x08,我会使用p/x *0x08吗?我得到了一个结果,但它是 64 位,我期待 32 位。谢谢。

【问题讨论】:

  • 我怀疑您是否会从 offset 获得任何有用的打印。您需要完整的地址,并且仅在此寄存器是内存映射的情况下才有效。这不是您标记的“cpu 寄存器”。这个ADC是什么?它是您的处理器的一部分吗?或者它是通过 I2C 或类似连接的一些外围设备?
  • @EugeneSh。是的,我正在尝试获得ADC。我怎么知道要偏移的地址是什么?
  • 什么ADC?您使用的是哪种硬件?
  • @EugeneSh。我正在使用 stm32g0316 迪斯科板。什么ADC是什么意思?
  • 所以你的 ADC 是一个内置外设,它是内存映射的。所以你应该咨询你的芯片reference manual并找到内存映射。我帮你做了,发现 ADC 映射到了0x40012400 - 0x400127FF 区域。

标签: c gdb cpu-registers adc


【解决方案1】:

您似乎正在尝试取消对具有已知值(在您的情况下为 0x08)的指针的引用,但 GDB 不知道它的类型。首先尝试进行类型转换,即使用p/x *(int*)0x08

【讨论】:

  • 我会说改用x/b,但我怀疑这就是OP所追求的(正如对OP的评论)
  • 我得到了与使用 p/x *0x08 相同的值。我什至可以查看某些地址的内容吗?
  • 抱歉,意思是x/w 4 个字节:ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_55.html
【解决方案2】:

原来我试图找到错误的地址并使用令人困惑的十六进制到二进制转换器。感谢@Eugene Sh。帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2011-07-22
    • 2015-04-06
    • 2021-03-29
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多