System ("Pause") unter Unix?

7

Normalerweise verwende ich einen Debugger wie diesen, cgdbsodass ich zum Glück systembis jetzt nicht auf Aufrufe zum Debuggen zurückgreifen musste .

Ich habe eine Binärdatei, deren Laden etwa 30 Minuten dauert gdbund die den Debugger danach häufig zum Absturz bringt , wahrscheinlich aufgrund der sehr großen Anzahl von Symbolen. Dies macht meinen normalen Workflow (Laden gdb, Hinzufügen von Haltepunkten, Identifizieren von Problemvariablen usw.) unhaltbar.

In Windows würde ich an diesem Punkt beginnen, viele coutund system("pause")(Haltepunkt des armen Mannes) Anweisungen in meinen Code einzufügen. Aber wie mache ich das in einer Unix-ähnlichen Umgebung?

quant
quelle

Antworten:

13

Vielleicht möchten Sie von lesen cin, um einen armen Mann zu bekommen pause - es wartet darauf, dass Sie einen Entereingeben, anstatt fortzufahren, während Sie Kaffee bekommen (wie es der sleep()Wille ist).

G-Man sagt "Reinstate Monica"
quelle
6

Ich greife manchmal darauf zurück

#define BRK()  do { printf("%s %d\n", __FILE__, __LINE__); getchar(); } while (0)
...
BRK();  // Stop and wait for enter

Außerdem kann die Funktionsinstrumentierung hilfreich sein: GCC ermöglicht das Einbinden in jede Funktionseingabe / -ausgabe, siehe /programming/2281739/automatically-adding-enter-exit-function-logs-to-a-project

valenok
quelle
Vielleicht unterscheidet sich Ihr C von meinem, aber ich muss entweder Parens in die Definition einfügen oder sie im Aufruf löschen, damit dies funktioniert. Ansonsten ist das ein praktischer Tipp!
Labyrinth
Ja, danke für die Korrektur, fügte parens hinzu
valenok
5

Das Gleiche gilt für cout/ cerr, und Sie können es einfach verwenden sleep()- siehe man 3 sleepoder man 3 usleepfür weitere Informationen.

Aaron D. Marasco
quelle