Steven ist richtig - der GDB Befehl po
ist eine Abkürzung für print-object
, die eigentlich nennt -debugDescription
(nicht -description
, wie man erwarten könnte) auf dem Objekt als Argument zur Verfügung gestellt. In vielen Fällen sehen Sie bei beiden Methoden dasselbe Ergebnis, da das eine das andere aufruft, sofern es nicht überschrieben wird. (Siehe zugehörigen . Hinweis: callout auf this Apple technote für Details beachten, dass in ihrem Codeb. po $r3
druckt den Inhalt eines PowerPC-Registers, aber Sie können eine beliebige Objekt Zeiger/Referenz verwenden, einschließlich Intel-Register, etc.)
Beachten Sie außerdem, dass print-object
nur für gültige Objekte funktioniert, die nicht freigegeben wurden. Es wird überhaupt nicht helfen, wenn Sie eine Nachricht an einen Borked-Zeiger senden. Angesichts des von Ihnen genannten Fehlers scheint es sich jedoch um eine gültige Objektinstanz zu handeln, die die Methode, die Sie aufrufen möchten, nicht implementiert.
Es ist auch entfernt möglich, dass das Objekt bereits zerstört wurde. This answer sollte in diesem Fall helfen.
Edit:
Es gibt auch andere Möglichkeiten, um Objekte im Debugger "zu untersuchen".Ich fragte this SO question über Xcode-Datenformatierer, die eine Möglichkeit ist, wie Sie feststellen können, wie eine benutzerdefinierte Klasse in der Summary-Spalte des Debuggers angezeigt wird. Die Dokumentation aus dieser Frage erklärt, wie es funktioniert. Ich habe den zusammenfassenden Ansatz gefunden, der viel hilft, den Zustand eines Objekts zu sehen.
"po 1" wird Ihr Programm nicht zum Absturz bringen - gdb ist schlauer als das. Es wird nur eine Fehlermeldung gedruckt. –
Beachten Sie auch, um nicht-Objekt Zeug (wie ein int) zu drucken, nur uns p, wie 'p 1' – RickDT
wo können Sie das schreiben? – chwi