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.
Bağlantı noktası, işlemlerin çalıştığı bir makineye bağlantıyı temsil eder. Bu makine yerel makine veya uzak makine olabilir (windows tabanlı olmayan bir işletim sistemi çalıştırıyor olabilir; daha fazla bilgi için bkz . Bağlantı noktaları ).
Bir bağlantı noktası IDebugPort2 arabirimiyle temsil edilir. Bağlantı noktasının bağlı olduğu makinede çalışan işlemler hakkında bilgi almak için kullanılır.
Program düğümlerini bağlantı noktasına kaydetmek ve işlem bilgisi isteklerini karşılamak için bir hata ayıklama motorunun bu bağlantı noktasına erişmesi gerekir. Örneğin, hata ayıklama altyapısı IDebugProgramProvider2 arabirimini uygularsa, GetProviderProcessData yönteminin uygulanması gerekli işlem bilgilerinin döndürülmesi için bağlantı noktasından isteyebilir.
Visual Studio, hata ayıklama altyapısına gerekli bağlantı noktasını sağlar ve bu bağlantı noktasını bir bağlantı noktası sağlayıcısından alır. Bir program hata ayıklayıcıdan veya bir istisna fırlatıldığı için Tam Zamanında [JIT] iletişim kutusunu tetiklediğinde bağlandıysa, kullanıcıya kullanılacak taşıma (bağlantı noktası sağlayıcısı için başka bir ad) seçeneği sunulur. Aksi takdirde, kullanıcı programı hata ayıklayıcının içinden başlatırsa, proje sistemi kullanılacak bağlantı noktası sağlayıcısını belirtir. Her iki durumda da Visual Studio, IDebugPortSupplier2 arabirimiyle temsil edilen bağlantı noktası sağlayıcısını başlatır ve IDebugPortRequest2 arabirimiyle AddPort'u çağırarak yeni bir bağlantı noktası ister. Bu bağlantı noktası daha sonra hata ayıklama altyapısına çeşitli şekillerde geçirilir.
Example
Bu kod parçası, ResumeProcess'e bir program düğümü kaydetmek için LaunchSuspended için sağlanan bağlantı noktasının nasıl kullanılacağını gösterir. Bu kavramla doğrudan ilgili olmayan parametreler netlik için atlanmıştır.
Uyarı
Bu örnek, işlemi başlatmak ve sürdürmek için bağlantı noktasını kullanır ve IDebugPortEx2 arabiriminin bağlantı noktasında uygulandığını varsayar. Bu, bu görevleri gerçekleştirmenin tek yolu değildir ve programın IDebugProgramNode2'sinin verilmesi dışında bağlantı noktasının dahil edilmemesi bile mümkündür.
// This is an IDebugEngineLaunch2 method.
HRESULT CDebugEngine::LaunchSuspended(/* omitted parameters */,
IDebugPort2 *pPort,
/* omitted parameters */,
IDebugProcess2**ppDebugProcess)
{
// do stuff here to set up for a launch (such as handling the other parameters)
...
// Now get the IPortNotify2 interface so we can register a program node
// in CDebugEngine::ResumeProcess.
CComPtr<IDebugDefaultPort2> spDefaultPort;
HRESULT hr = pPort->QueryInterface(&spDefaultPort);
if (SUCCEEDED(hr))
{
CComPtr<IDebugPortNotify2> spPortNotify;
hr = spDefaultPort->GetPortNotify(&spPortNotify);
if (SUCCEEDED(hr))
{
// Remember the port notify so we can use it in ResumeProcess.
m_spPortNotify = spPortNotify;
// Now launch the process in a suspended state and return the
// IDebugProcess2 interface
CComPtr<IDebugPortEx2> spPortEx;
hr = pPort->QueryInterface(&spPortEx);
if (SUCCEEDED(hr))
{
// pass on the parameters we were given (omitted here)
hr = spPortEx->LaunchSuspended(/* omitted parameters */,ppDebugProcess)
}
}
}
return(hr);
}
HRESULT CDebugEngine::ResumeProcess(IDebugProcess2 *pDebugProcess)
{
// Make a program node for this process
HRESULT hr;
CComPtr<IDebugProgramNode2> spProgramNode;
hr = this->GetProgramNodeForProcess(pProcess, &spProgramNode);
if (SUCCEEDED(hr))
{
hr = m_spPortNotify->AddProgramNode(spProgramNode);
if (SUCCEEDED(hr))
{
// resume execution of the process using the port given to us earlier.
// (Querying for the IDebugPortEx2 interface is valid here since
// that's how we got the IDebugPortNotify2 interface in the first place.)
CComPtr<IDebugPortEx2> spPortEx;
hr = m_spPortNotify->QueryInterface(&spPortEx);
if (SUCCEEDED(hr))
{
hr = spPortEx->ResumeProcess(pDebugProcess);
}
}
}
return(hr);
}