Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, yerel ve yönetilen kod için iş parçacığı adlarını ayarlama hakkında bilgiler de dahil olmak üzere iş parçacıklarında hata ayıklamaya yönelik yararlı bilgiler sağlar.
C/C++ ipuçları
Yerel kodda iş parçacıklarında hata ayıklarken kullanabileceğiniz bazı ipuçları şunlardır:
İzleme penceresine veya QuickWatch iletişim kutusuna
@TIByazarak içeriğini görüntüleyebilirsiniz.@Errpenceresine veya Hızlı İzleme iletişim kutusuna yazarak geçerli iş parçacığının son hata kodunu görüntüleyebilirsiniz.C Run-Time Kitaplıkları (CRT) işlevleri, çok iş parçacıklı bir uygulamada hata ayıklamak için yararlı olabilir. Daha fazla bilgi için bkz. _malloc_dbg.
C/C++ dilinde iş parçacığı adı ayarlama
İş parçacığı adlandırma, Visual Studio'nun herhangi bir sürümünde mümkündür. İş parçacığı adlandırma, çalışan bir işlemde hata ayıklarken İş Parçacıkları penceresindeki ilgi çekici iş parçacıklarını tanımlamak için kullanışlıdır. Tanınabilir adlandırılmış iş parçacıklarına sahip olmak, kilitlenme dökümü incelemesi yaparak ve çeşitli araçlar kullanarak performans izlemelerini analiz ederken otomatik hata ayıklaması gerçekleştirirken de yararlı olabilir.
İş parçacığı adı belirleme yöntemleri
İş parçacığı adı ayarlamanın iki yolu vardır. İlki SetThreadDescription işlevi aracılığıyla yapılır. İkincisi, Visual Studio hata ayıklayıcısı sürece ekliyken belirli bir istisna fırlatarak yapılır. Her yaklaşımın avantajları ve uyarıları vardır. kullanımı SetThreadDescription Windows 10 sürüm 1607 veya Windows Server 2016'dan itibaren desteklenir.
her iki yaklaşımın da birlikte kullanılabileceğini belirtmek gerekir, çünkü istenirse, çalıştıkları mekanizmalar birbirinden bağımsızdır.
SetThreadDescription kullanarak bir iş parçacığı adı ayarla
Avantajlar:
- Hata ayıklayıcının SetThreadDescription çağrılırken işleme eklenip eklenmediğine bakılmaksızın, Visual Studio'da hata ayıklarken iş parçacığı adları görünür.
- İş parçacığı adları, Visual Studio'da kilitlenme dökümü yüklenerek son hata ayıklaması yapılırken görünür.
- WinDbg hata ayıklayıcısı ve Windows Performans Çözümleyicisi performans çözümleyicisi gibi diğer araçlar kullanılırken iş parçacığı adları da görünür.
Uyarılar:
- Parçacık adları yalnızca Visual Studio 2017 sürüm 15.6 ve sonraki sürümlerde görünür.
- Kilitlenme dökümü dosyasında hata ayıklama sonrasında iş parçacığı adları yalnızca kilitlenme Windows 10 sürüm 1607, Windows Server 2016 veya sonraki Windows sürümlerinde oluşturulduysa görünür.
Example:
#include <windows.h>
#include <processthreadsapi.h>
int main()
{
HRESULT r;
r = SetThreadDescription(
GetCurrentThread(),
L"ThisIsMyThreadName!"
);
return 0;
}
Özel durum oluşturarak iş parçacığı adı ayarlama
Programınızda iş parçacığı adı ayarlamanın bir diğer yolu da, özel olarak yapılandırılmış bir özel durum oluşturarak istenen iş parçacığı adını Visual Studio hata ayıklayıcısına iletmektir.
Avantajlar:
- Visual Studio'nun tüm sürümlerinde çalışır.
Uyarılar:
- Yalnızca özel durum tabanlı yöntem kullanıldığında hata ayıklayıcı eklendiğinde çalışır.
- Bu yöntem kullanılarak ayarlanan iş parçacığı adları dökümlerde veya performans analizi araçlarında kullanılamaz.
Example:
SetThreadName Aşağıda gösterilen işlev bu özel durum tabanlı yaklaşımı gösterir. Çağrı SetThreadName tamamlandıktan sonra threadName parametresinin belleği serbest bırakılabilsin diye threadName iş parçacığı adının otomatik olarak iş parçacığına kopyalanacağını unutmayın.
//
// Usage: SetThreadName ((DWORD)-1, "MainThread");
//
#include <windows.h>
const DWORD MS_VC_EXCEPTION = 0x406D1388;
#pragma pack(push,8)
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // Must be 0x1000.
LPCSTR szName; // Pointer to name (in user addr space).
DWORD dwThreadID; // Thread ID (-1=caller thread).
DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)
void SetThreadName(DWORD dwThreadID, const char* threadName) {
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = threadName;
info.dwThreadID = dwThreadID;
info.dwFlags = 0;
#pragma warning(push)
#pragma warning(disable: 6320 6322)
__try{
RaiseException(MS_VC_EXCEPTION, 0, sizeof(info) / sizeof(ULONG_PTR), (ULONG_PTR*)&info);
}
__except (EXCEPTION_EXECUTE_HANDLER){
}
#pragma warning(pop)
}
Yönetilen kodda iş parçacığı adını ayarlama
İş parçacığı adlandırma, Visual Studio'nun herhangi bir sürümünde mümkündür. İş parçacığı adlandırma, İş Parçacıkları penceresinde iş parçacıklarını takip etmek için kullanışlıdır.
Yönetilen kodda bir iş parçacığı adını ayarlamak için Name özelliğini kullanın.
Example
public class Needle
{
// This method will be called when the thread is started.
public void Baz()
{
Console.WriteLine("Needle Baz is running on another thread");
}
}
public void Main()
{
Console.WriteLine("Thread Simple Sample");
Needle oNeedle = new Needle();
// Create a Thread object.
System.Threading.Thread oThread = new System.Threading.Thread(oNeedle.Baz);
// Set the Thread name to "MyThread".
oThread.Name = "MyThread";
// Starting the thread invokes the ThreadStart delegate
oThread.Start();
}