Wie zeige ich in Clions Debugger den gesamten Inhalt eines Int-Arrays an?
Lesezeit: 3 Minuten
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
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
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;
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:
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:
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