Wie zeige ich in Clions Debugger den gesamten Inhalt eines Int-Arrays an?

Lesezeit: 3 Minuten

Benutzeravatar von Embedded_Mugs
Eingebettete_Tassen

Im Moment zeigt es nur das erste Element des Arrays, aber ich möchte eine Visualisierung aller Elemente im Array. Ich denke, Clion verwendet GDB.

BEARBEITEN: Ich beziehe mich speziell auf Arrays auf dem Heap. Arrays auf dem Stack können visualisiert werden.

  • Leider gibt es derzeit keine solche Funktion in CLion. Hier ist jedoch die entsprechende Feature-Anfrage: CPP-6550 „Als Array anzeigen“ für Zeigervariablenstimme bitte hoch, wenn das bei dir der Fall ist.

    – Eldar Abusalimov

    31. Oktober 2016 um 9:43 Uhr

  • FTR: Sie stimmen ab, indem Sie auf klicken sehr klein Daumen-hoch-Symbol auf der rechten Seite der Seite.

    – cubuspl42

    2. November 2016 um 12:56 Uhr

Benutzeravatar von Miguel Alonso Jr
Miguel Alonso jr

Die Antwort von cubuspl42 funktioniert für GDB. Aber wenn Sie auf einem Mac LLDB als Debugger verwenden, ist die richtige Methode

(MyType(*)[128])myArray

Hoffe das hilft!

  • spare mir eine nacht

    – Fettleibchen

    17. Februar 2020 um 15:50 Uhr

  • Irgendein LLDB-Dokument dazu?

    – zwcloud

    22. April 2021 um 3:53 Uhr

Benutzeravatar von cubuspl42
cubuspl42

Leider unterstützt CLion derzeit keine solche Funktion. Wie vorgeschlagen von einem JetBrains-Mitarbeiter, können Sie eine Problemumgehung verwenden. Verwenden Sie im Fenster Evaluate / Watches den folgenden Ausdruck:

(MyType[128])myArray

Sie können eine beliebige Array-Größe verwenden; Was auch immer für dich funktioniert.

Wenn Ihr Array in gespeichert ist void * Variable, müssen Sie etwas kniffligeres tun:

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

  • Hinweis (MyType[128])myArray funktioniert für LLDB. Verwenden Sie für GDB (MyType[128])*myArray, um korrekte Ergebnisse zu erhalten.

    – DaTeng

    19. Juni 2019 um 0:19 Uhr


  • @cubuspl42, danke für deine Lösung. void * funktioniert für jeden Typ

    – bem22

    27. Oktober 2019 um 22:02 Uhr

  • (char *[10])*argv Wenn Sie versuchen, die Befehlszeilenargumente des Programms zu beobachten. argv selbst ist nullterminiert. Sie werden Umgebungsvariablen nach der Null oder möglicherweise Müll auf Nicht-Unixy-Systemen sehen.

    – groß_29

    3. Februar 2021 um 20:51 Uhr


Jede Syntax, die der zugrunde liegende Debugger versteht, sollte eigentlich funktionieren. Im Fall von GDB könnten Sie beispielsweise verwenden *array@sizewo array kann ein beliebiger Zeigerausdruck und sein size kann ein beliebiger (positiver) ganzzahliger Ausdruck sein, und beide können Variablen, Funktionsaufrufe, Register und alles enthalten, was GDB versteht. Gültig wäre z.B. so etwas:

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

Ich hatte heute das gleiche Problem, aber stattdessen hatte ich eine Reihe von Hinweisen;

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++;
}

Ich hatte Probleme, die Zuordnung dieses Speichers in CLion gdb zu sehen, weil es einen Zeiger auf einen Zeiger betrachtete.

Ich habe das gelöst, indem ich auf das erste Element meines Arrays (pthreads[0]) und dann beim nächsten suchen n Elemente von dort.

Dazu müssen Sie den Typ (pthread_t*[]) und verwenden Sie dann den Zielspeicher, der pthreads ist[0] (dh erstes Element)

Hinweis: Ich habe verwendet calloc mit 0, um meine einzustellen pthreads Reihe. Dieses Foto zeigt, wie Speicher an Position 0 im CLion-Debugger korrekt zugewiesen wurde.

Ich habe diesen Post gemacht, weil keiner der obigen Posts mich zu dem Schluss geführt hat, den ich hier geschrieben habe.

Beispiel: clion gdb-Funktion

Benutzeravatar von Chen Li
Chen Li

Sie können Vorlage und Referenz verwenden:

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

Wenn Sie das Array an eine andere Funktion übergeben möchten, sollte die übergebene Funktion auch Vorlage und Referenz für das Array verwenden:

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

Mit dieser Methode können Sie den gesamten Inhalt eines int-Arrays in clion anzeigen

1409140cookie-checkWie zeige ich in Clions Debugger den gesamten Inhalt eines Int-Arrays an?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy