Der Xcode-Bereich "Thread-Liste" zeigt englischähnliche Namen für mehrere spezielle Threads: com.apple.main-thread, com.apple.libdispatch-manager, com.dispatchfractal.opencl, com.dispatchfractal.opengl, com.apple .root.low-priority, ... Aber für von Benutzern erstellte Threads ist dieses Feld leer.
Gibt es eine Möglichkeit, das Feld "Thread-Name" programmgesteuert aus meiner Anwendung zu setzen? Wenn ich beispielsweise einen Thread für Netzwerk-I / O habe, möchte ich, dass er im Debugger als "com.example.network-io" angezeigt wird. Wenn ich fünf Worker-Threads spawne, möchte ich sie "Worker A", "Worker B" usw. nennen können. Zeichnet Xcode seine Thread-Namen von einer API, die ich selbst einhaken könnte? Vielleicht etwas wie CFAssignDebuggerNameToCurrentThread
? :)
Wahrscheinlich nicht genau was Sie wollen, aber NSThread hat setName:
Methode, mit der Sie den Namen des Threads festlegen können. Sie können dem Thread einen aussagekräftigen Namen zuweisen, sodass Sie im Debugger Folgendes erhalten:
Denken Sie auch daran, dass einige Apis (wie große zentrale Dispatch) mit Thread-Pools arbeiten, so dass Sie nicht sicher sind, in welchem Thread Ihre Operation ausgeführt wird
Bearbeiten:
com.apple.main-thread
, com.apple.libdispatch-manager
etc sind Labels der entsprechenden Versandwarteschlangen. Sie können den Label-Wert festlegen, wenn die Warteschlange mit dispatch_queue_create
function erstellt und später aus der Warteschlange mit dispatch_queue_get_label
function abgerufen wird.
Es scheint, dass es keine API gibt, um den Label-Wert der bestehenden Dispatch-Queue zu ändern, und ich rate auch nicht, die Labels der System-Queues zu ändern.
Wenn Sie einen Verweis auf den Thread erhalten können, dessen Namen Sie ändern möchten, können Sie ihn in der Debugger-Konsole ändern. Zwei Möglichkeiten, dies für den aktuellen Thread zu tun:
(lldb) po [[NSThread currentThread] setName:@"foo"]
(lldb) expression (void)[(NSThread*)[NSThread currentThread] setName:@"foo"];
Ich nehme an, Sie könnten dasselbe von einem Haltepunkt aus tun, der einen zugehörigen Ausdruck hat. Wenn Sie wissen, dass eine Methode in dem Thread ausgeführt wird, an dem Sie interessiert sind, können Sie einen Haltepunkt festlegen, der einen der obigen Befehle enthält, und ihn nach dem Ausführen des Befehls automatisch fortsetzen lassen. Das hätte den Effekt, dass bei jeder Ausführung des Codes automatisch der Name des Threads festgelegt wird, was für das Debugging nützlich sein könnte.
pesudo-Code für - [NSThread setName:]
%Vor%Also, der einfachste Weg, den Namen zu setzen, ist pthread_setname_np .
Tags und Links multithreading xcode nsthread