2016-03-29 7 views
3

Zusammenfassung: Ich habe die Nachricht erhalten:Was genau ist der Befehl "Speicherverlauf"?

AddressSanitizer debugger support is active. Memory error breakpoint has been installed and you can now use it in the 'memory history' command.

Was ist die "memory history" -Befehl, und wie genau kann ich es nutzen?

Details:

  • hatte ich ein Stück Code, das eine Speicher Warnung hatte, was zu einem Absturz führte.
  • Ich habe den Address Sanitizer eingeschaltet, indem ich auf "Edit Scheme"> "Run"> "Enable Address Sanitizer" gehe.
  • Nach dem Einschalten und erneutem Ausführen des gleichen Codes trat der Absturz nicht mehr auf, aber die Nachricht erschien.

Was bedeutet es, und was genau ist der Speicherverlauf Befehl? Wie benutze ich es? Ich habe gesucht, aber ich habe nichts gefunden, was meine Frage beantwortet.

+0

Verwenden Sie keine Bilder, bei denen der zitierte Text ausreicht, weil Bilder nicht durchsuchbar sind _und_ Fragen müssen in sich abgeschlossen sein. Wenn Sie Bilder _unwesentliche_ zusätzliche Informationen verwenden, verwenden Sie keine Hosting-Websites von Drittanbietern. – dandan78

+0

Dies wird bemerkt, danke. – crentagon

Antwort

5

Das Ausführen unter Adresse Sanitizer ermöglicht es Ihnen, zu sehen, wie Objekte zugewiesen wurden. Der memory history Befehl benötigt einen Zeiger/Adresse und es wird gezeigt, wie das Objekt (eine historische stacktrace der Zuteilung) zugewiesen wurde:

(lldb) po self 
<MasterViewController: 0x61800000e080> 

(lldb) memory history 0x61800000e080 
    thread ... name = 'Memory allocated at' 
    frame #0: 0x00000001051bba97 libclang_rt.asan_iossim_dynamic.dylib`wrap_calloc + 199 
    frame #1: 0x00000001064362fd libobjc.A.dylib`class_createInstance + 84 
    frame #2: 0x0000000106440dc7 libobjc.A.dylib`_objc_rootAlloc + 41 
    frame #3: 0x00000001072d6d25 UIKit`-[UIClassSwapper initWithCoder:] + 175 
    frame #4: 0x00000001074c731b UIKit`UINibDecoderDecodeObjectForValue + 683 
    ... 

arbeitet auf es sogar bereits ausgeplanten Objekte, in denen es zeigt auch die Aufhebung der Zuordnung Backtrace! Dies ist äußerst nützlich, wenn Sie versehentlich auf ein bereits freigegebenes Objekt zugreifen.