现在它只显示数组的第一个元素,但我希望看到数组中的所有元素。我觉得Clion在用广发行编辑:我特别提到堆上的数组。堆栈上的数组可以可视化。
ycl3bljg1#
cubuspl42的答案适用于GDB。但是如果您在Mac上使用LLDB作为调试器,正确的方法是
(MyType(*)[128])myArray
希望这有帮助!
kqlmhetl2#
不幸的是,CLion目前不支持此功能。正如by JetBrains employee所建议的,您可以使用一个变通方法。在Evaluate / Watches窗口中,使用以下表达式:
(MyType[128])myArray
可以使用任意数组大小;你觉得怎么样就怎么样如果你的数组存储在void *变量中,你需要做一些更棘手的事情:
void *
(MyType[128])*(char*)myArray
o7jaxewo3#
实际上,底层调试器理解的任何语法都应该可以工作。例如,在GDB的情况下,可以使用*array@size,其中array可以是任何指针表达式,size可以是任何(正)整数表达式,两者都可以包含变量、函数调用、寄存器以及GDB理解的任何内容。这样的东西是有效的,例如:
*array@size
array
size
*((int*)$rsp - 0x100)@get_size(data)
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
n
calloc
pthreads
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数组的全部内容
jc3wubiy6#
请注意,从2021.3版本开始,您现在可以通过右键单击变量查看器中的特定变量并选择“View as Array...”来查看指针作为数组:
6条答案
按热度按时间ycl3bljg1#
cubuspl42的答案适用于GDB。但是如果您在Mac上使用LLDB作为调试器,正确的方法是
希望这有帮助!
kqlmhetl2#
不幸的是,CLion目前不支持此功能。正如by JetBrains employee所建议的,您可以使用一个变通方法。在Evaluate / Watches窗口中,使用以下表达式:
可以使用任意数组大小;你觉得怎么样就怎么样
如果你的数组存储在
void *
变量中,你需要做一些更棘手的事情:o7jaxewo3#
实际上,底层调试器理解的任何语法都应该可以工作。例如,在GDB的情况下,可以使用
*array@size
,其中array
可以是任何指针表达式,size
可以是任何(正)整数表达式,两者都可以包含变量、函数调用、寄存器以及GDB理解的任何内容。这样的东西是有效的,例如:5vf7fwbs4#
我今天也遇到了同样的问题,但是,我得到了一个指针数组;
我在CLion gdb中看到这个内存的分配时遇到了麻烦,因为它查看的是指向一个指针的指针。
我通过定位数组的第一个元素(pthreads[0]),然后从那里查看接下来的
n
个元素来解决这个问题。为此,需要强制转换类型(pthread_t*[]),然后使用目标内存,即pthreads[](即第一个元素)
注意:我使用
calloc
和0来设置我的pthreads
数组。这张照片显示了如何在CLion调试器中的位置0正确分配内存。我写这篇文章是因为上面的文章都没有让我得出我在这里写的结论。
示例:x1c 0d1x
ruyhziif5#
您可以使用模板和引用:
如果要将数组传递给其他函数,则传递的函数还应使用数组的模板和引用:
此方法允许您在CLION中查看一个int数组的全部内容
jc3wubiy6#
请注意,从2021.3版本开始,您现在可以通过右键单击变量查看器中的特定变量并选择“View as Array...”来查看指针作为数组: