【问题标题】:Display pointer as array in Qt Creator with CDB for debugger在 Qt Creator 中将指针显示为数组,使用 CDB 进行调试
【发布时间】:2015-03-17 09:22:53
【问题描述】:

编辑 2:如果不可能,我会将赏金奖励给能证明这一点的答案(我的意思是提供一些可靠的来源来支持它不可能的说法)。


假设我有一个指向数组的指针,例如:

int arr[3];
int *p = new int[3];

我可以看到arr 的所有元素,但只能看到p 的第一个元素。如何查看p 的所有3 个元素?

我从View Array contents in QtCreatorView Array contents in Qt Creator debugger 的答案中尝试了各种建议,但它们对我不起作用:

我认为这是因为我在 CDB 上,而其他 2 个问题是针对 GDB 的。国行能否做到这一点?

编辑:我忘了提,但p,3 也不起作用。

【问题讨论】:

  • 试试(int (&) [3])p
  • @GreenScape CDB 记录此错误:eERROR: Unable to add watch item "watch.1"/"(int (&) [3])p": Cannot add symbol '(int (&) [3])p': DEBUG_ANY_ID was returned as symbol index by AddSymbol.

标签: c++ qt qt-creator windbg


【解决方案1】:

添加到表达式评估器(菜单窗口->视图->局部变量和表达式)

(int(*)[3])p

这在基于 Qt 5.3.2(GCC 4.9.2,64 位)的 Qt Creator 3.2.1 中运行良好,于 2016 年 5 月 10 日 17:53:15 构建。

【讨论】:

    【解决方案2】:

    您可以使用 *(p+1) 和 *(p+2) 来访问其他两个元素。

    编辑: @sashoalm 您需要在下面执行此操作:

    int *pindex[3];
    for(int j=0; j< 3;j++){
        pindex[j]= p+j;
    }
    

    然后你就可以在调试器中看到你所有的 p。

    希望这会有所帮助。

    【讨论】:

    • 这根本不是解决方案。我已经知道p[1]p[2]。我需要它来处理数百个元素的数组。
    【解决方案3】:

    查看 *p 的所有元素:

    1. 右键单击本地和表达式。
    2. 输入 *(p+1) 和 *(p+2)。

    所以,你可以看到所有三个元素。

    【讨论】:

    • 如果您要复制现有答案,您可能会选择一个没有被否决且不能令人满意地回答问题的答案。
    • 请不要抄袭别人的答案,为SE做一些新的贡献
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多