在Clion的调试器中,如何显示int数组的全部内容

ux6nzvsh  于 2023-05-06  发布在  其他
关注(0)|答案(6)|浏览(356)

现在它只显示数组的第一个元素,但我希望看到数组中的所有元素。我觉得Clion在用广发行
编辑:我特别提到堆上的数组。堆栈上的数组可以可视化。

ycl3bljg

ycl3bljg1#

cubuspl42的答案适用于GDB。但是如果您在Mac上使用LLDB作为调试器,正确的方法是

(MyType(*)[128])myArray

希望这有帮助!

kqlmhetl

kqlmhetl2#

不幸的是,CLion目前不支持此功能。正如by JetBrains employee所建议的,您可以使用一个变通方法。在Evaluate / Watches窗口中,使用以下表达式:

(MyType[128])myArray

可以使用任意数组大小;你觉得怎么样就怎么样
如果你的数组存储在void *变量中,你需要做一些更棘手的事情:

(MyType[128])*(char*)myArray
o7jaxewo

o7jaxewo3#

实际上,底层调试器理解的任何语法都应该可以工作。例如,在GDB的情况下,可以使用*array@size,其中array可以是任何指针表达式,size可以是任何(正)整数表达式,两者都可以包含变量、函数调用、寄存器以及GDB理解的任何内容。这样的东西是有效的,例如:

*((int*)$rsp - 0x100)@get_size(data)
5vf7fwbs

5vf7fwbs4#

我今天也遇到了同样的问题,但是,我得到了一个指针数组;

pthread_t** pthreads = (pthread_t**) malloc(//malloc args)
thread_count = 0;

while(thread_count < 10) {
    pthread_t* myThread = (pthread_t*) malloc(//malloc args)
    pthreads[thread_count] = myThread;
    thread_count++;
}

我在CLion gdb中看到这个内存的分配时遇到了麻烦,因为它查看的是指向一个指针的指针。
我通过定位数组的第一个元素(pthreads[0]),然后从那里查看接下来的n个元素来解决这个问题。
为此,需要强制转换类型(pthread_t*[]),然后使用目标内存,即pthreads[](即第一个元素)
注意:我使用calloc和0来设置我的pthreads数组。这张照片显示了如何在CLion调试器中的位置0正确分配内存。
我写这篇文章是因为上面的文章都没有让我得出我在这里写的结论。
示例:x1c 0d1x

ruyhziif

ruyhziif5#

您可以使用模板和引用:

template<int N>
void foo1(int (&arr)[N])
{
    ...
}

如果要将数组传递给其他函数,则传递的函数还应使用数组的模板和引用:

template<int N>
void foo2(int (&arr)[N])
{
    ...
}
template<int N>
void foo1(int (&arr)[N])
{
    foo2(arr);
}

此方法允许您在CLION中查看一个int数组的全部内容

jc3wubiy

jc3wubiy6#

请注意,从2021.3版本开始,您现在可以通过右键单击变量查看器中的特定变量并选择“View as Array...”来查看指针作为数组:

相关问题