【问题标题】:Is it possible to declare a GDB convenience variable as an array?是否可以将 GDB 便利变量声明为数组?
【发布时间】:2013-07-30 20:31:43
【问题描述】:

我想声明一个数组便利变量,比如

set $list[10]

但我得到一个语法错误。

是否可以使用便利变量创建向量?

我可以使用指针,如果我能找到 GDB 可以使用但目标程序不会使用的绝对区域内存。

哦,顺便说一句,我没有我正在调试的目标程序的符号表,使用与 GDB 不兼容的编译器。

我手上的GDB跨目标版本不支持python。

【问题讨论】:

    标签: gdb


    【解决方案1】:

    我认为只有在低级分配内存才有可能。也就是说,尝试类似:

    set $list = (int *) malloc (10 * sizeof (int))
    

    更改类型以适合。

    另一个类似的选项是使用 {...} 功能。我不确定,但我认为这可能会在某些情况下分配内存不足。无论如何,尝试:

    print {1,2,3,4}[2]
    

    我明白了

    $1 = 3
    

    【讨论】:

    • 我会试试 {...} 功能。我不能使用 malloc() 因为我没有符号表,因此 gdb 不知道 malloc() 在哪里。我可以使用地图中的 malloc 地址创建一个便利变量 $Malloc。这可能行得通。
    • 如果您有任何可用的地址,您可以使用 {TYPE} 转换将其视为其他内容。例如:设置 $var = {int[4]} &main.或者类似的东西,看手册——我很难记住这个扩展的确切语法。
    • @TomTromey 我不认为只能通过手动分配内存来实现。看:代码set $test="Hello",p perror($test) 工作正常。您甚至可以获取地址。
    • 我认为sn-p会导致gdb在底层调用malloc为字符串腾出一些空间。
    【解决方案2】:

    是的,你可以。

    例如,

    (gdb) set $a = (int [3]) {0}
    (gdb) p $a
    $14 = {0, 0, 0}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      相关资源
      最近更新 更多