簡體   English   中英

在 Clion 的調試器中,如何顯示 int 數組的全部內容

[英]In Clion's debugger, how do I show the entire contents of an int array

現在它只顯示數組的第一個元素,但我想要數組中所有元素的可視化。 我認為 Clion 正在使用 GDB。

編輯:我特指堆上的數組。 堆棧上的數組可以可視化。

cubuspl42的答案適用於 GDB。 但是如果你在 Mac 上使用 LLDB 作為你的調試器,正確的方法是

(MyType(*)[128])myArray

希望這有幫助!

不幸的是,CLion 目前不支持此類功能。 根據JetBrains 員工的建議,您可以使用一種解決方法。 在 Evaluate / Watches 窗口中使用以下表達式:

(MyType[128])myArray

您可以使用任意數組大小; 任何對你有用的東西。

如果數組存儲在void *變量中,則需要做一些更棘手的事情:

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

實際上,底層調試器理解的任何語法都應該有效。 例如,在 GDB 的情況下,您可以使用*array@size ,其中array可以是任何指針表達式, size可以是任何(正)整數表達式,並且兩者都可以包括變量、函數調用、寄存器以及 GDB 理解的任何內容. 像這樣的事情是有效的,例如:

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

您可以使用模板和參考:

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 數組的全部內容

我今天遇到了同樣的問題,但相反,我有一個指針數組;

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](即第一個元素)

注意:我使用帶有 0 的calloc來設置我的pthreads數組。 這張照片顯示了如何在 CLion 調試器中的位置 0 正確分配內存。

我寫這篇文章是因為上面的文章都沒有讓我得出我在這里寫的結論。

示例: clion gdb 功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM