【问题标题】:GDB commands stop execution if previous command fails如果前一个命令失败,GDB 命令将停止执行
【发布时间】:2019-08-29 09:27:39
【问题描述】:

在 GDB 中,希望在遇到断点时打印数组中所有指针的值。可能存在值为0x0的数组元素。

例如:

arr[] = {0x0, 0x5cb04, 0x5510, 0x0, 0x5c84}

(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x1234 in fun1 at file1.c:200
        p arr
        p *arr[0]
        p *arr[1]
        p *arr[2]
        p *arr[3]
        c

但是 GDB 无法打印 *arr[1], *arr[2], *arr[3], coz 的值

*arr[0] 遇到错误

“无法访问地址 0x0 的内存”。

这个问题有什么解决方案或变通方法吗?

【问题讨论】:

  • 您想打印arr[0] 以获取元素值而不是*arr[0] 取消引用元素值,对吧?
  • 我想取消引用元素值。是否有一个 if 条件可以在这里提供帮助?
  • 我有一个指针数组,在这种情况下,arr[0] 会给我 0x0,arr[1] 会给我 0x5cb04。我想在 0x5cb04 打印值,所以我在做 *arr[1]
  • 你的意思是p (arr[0]) ? *arr[0] : "null"
  • @SanderDeDycker 感谢它有效。将此作为答案发布。

标签: c linux gdb


【解决方案1】:

gdb print command 可以使用任何有效的expression,因此您可以执行以下操作:

p (arr[0]) ? *arr[0] : "null"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2020-11-15
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多