如何在MacOSX中设置线程名称

18
在Windows中,可以通过这个代码设置线程名称。然后,在调试器中会显示线程名称。
在 MacOSX 中,我看到了一些暗示表明有线程名称。我认为类 NSThread 也有一个名称属性。我的目标是在我的 C++ 应用程序中设置线程名称,并在 Xcode/gdb 中看到它。
其他相关问题:

我可以问一下为什么您接受了那个答案吗?它并没有回答您的问题,但有其他的答案是可以的。 - deanWombourne
@deanWombourne:在写这篇文章的时候,我没有MacOSX 10.6。而且还有线程名称,所以其他答案对我来说并没有回答到这个问题。但是现在,这个问题可能已经过时了。 - Albert
对于那些试图为Leopard构建东西的人来说非常方便! - SamB
2个回答

30

我建议如下:

[[NSThread currentThread] setName:@"My thread name"]; // For Cocoa  
pthread_setname_np("My thread name"); // For GDB.

(你需要包含pthread.h头文件) 在XCode 3.2.3中非常有效(至少适用于iPhone开发)


2
没有冒犯cdespinosa(嗨,Chris! :)的意思,但他的非答案被接受对我来说似乎很奇怪。DaveH实际上回答了这个问题(我能够使用他提供的答案解决我的问题+1 :) - Olie
是的,我同意。这听起来像是一个更好的答案。更有道理。 - Henley
2
顺便提一下,pthread_setname_np 在许多其他平台上也可用。但是,接口通常不同。请参见此处以获取良好的概述。 - Albert

2
你使用的是哪个版本的Xcode?线程名称仅在Mac OS X 10.6和Xcode 3.2中支持。

我正在使用OSX 10.5和Xcode 3.1.4。所以那里没有机会了吗?在OSX 10.5中根本没有机会吗?在NSThread:setName的文档中,它说可用于Mac OS X v10.5及更高版本。 - Albert
1
是的,但是线程名称在10.5中并没有从Objective-C层传递到运行时线程层,因为pthread_setname_np API直到10.6才存在,并且您需要Xcode 3.2才能获取和显示线程名称。 - cdespinosa
那么,如果我将线程名称传播到运行时线程层,MacOSX 10.5上的Xcode 3.2就能够显示线程名称了吗?我该如何做到这一点? - Albert
不,Xcode 3.2只支持10.6版本的Mac OS X。如果你想在Xcode界面中看到线程名称,你必须在Mac OS X 10.6上使用Xcode 3.2。 - cdespinosa
3
我想明确告诉其他读者:pthread_setname_np是解决方法。 - Albert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接