现在它只显示数组的第一个元素,但我想要数组中所有元素的可视化。我认为 Clion 正在使用 GDB。
编辑:我特指堆上的数组。堆栈上的数组可以被可视化。
不幸的是,CLion 目前不支持此类功能。根据 JetBrains 员工 的建议,您可以使用变通方法。在 Evaluate / Watches 窗口中使用以下表达式:
(MyType[128])myArray
您可以使用任意大小的数组;什么对你有用。
如果你的数组存储在
void *
变量中,你需要做一些更棘手的事情:
(MyType[128])*(char*)myArray
底层调试器理解的任何语法实际上都应该有效。例如,对于 GDB,您可以使用
*array@size
,其中 array
可以是任何指针表达式,而 size
可以是任何(正)整数表达式,两者都可以包括变量、函数调用、寄存器等GDB 理解。这样的事情是有效的,例如:
*((int*)$rsp - 0x100)@get_size(data)
我今天遇到了同样的问题,但是我有一个指针数组;
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[0](即第一个元素)
注意:我使用
calloc
和 0 来设置我的 pthreads
数组。这张照片显示了如何在 CLion 调试器的位置 0 正确分配内存。
我写这篇文章是因为上面的帖子都没有让我得出我在这里写的结论。
您可以使用模板和参考:
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数组的全部内容
请注意,从 2021.3 版本开始,您现在可以通过在变量查看器中右键单击特定变量并选择“以数组形式查看...”来将指针以数组形式查看: