uint processId)
{
Trace.TraceInformation($"HostServices.UpdateTarget {processId}");
- if (processId == 0)
+ if (_target == null)
{
- DestroyTarget(self);
+ return CreateTarget(self);
}
- else
+ else if (_target.ProcessId.GetValueOrDefault() != processId)
{
- if (_target == null)
- {
- return CreateTarget(self);
- }
- else if (_target.ProcessId.GetValueOrDefault() != processId)
- {
- DestroyTarget(self);
- return CreateTarget(self);
- }
+ DestroyTarget(self);
+ return CreateTarget(self);
}
return HResult.S_OK;
}
if (((Argument & DEBUG_STATUS_MASK) == DEBUG_STATUS_BREAK) && ((Argument & DEBUG_STATUS_INSIDE_WAIT) == 0))
{
ULONG processId = 0;
- m_system->GetCurrentProcessSystemId(&processId);
- m_control->Output(DEBUG_OUTPUT_NORMAL, "ChangeEngineState: processId %d\n", processId);
+ if (FAILED(m_system->GetCurrentProcessSystemId(&processId)))
+ {
+ m_control->Output(DEBUG_OUTPUT_NORMAL, "ChangeEngineState: DestroyTarget\n");
+ Extensions::GetInstance()->DestroyTarget();
+ }
+ else
+ {
+ m_control->Output(DEBUG_OUTPUT_NORMAL, "ChangeEngineState: processId %d\n", processId);
- // Has the process changed since the last commmand?
- Extensions::GetInstance()->UpdateTarget(processId);
+ // Has the process changed since the last commmand?
+ Extensions::GetInstance()->UpdateTarget(processId);
- // Flush the target when the debugger target breaks
- Extensions::GetInstance()->FlushTarget();
+ // Flush the target when the debugger target breaks
+ Extensions::GetInstance()->FlushTarget();
+ }
}
}
return DEBUG_STATUS_NO_CHANGE;
return hr;
}
ULONG processId = 0;
- m_pDebuggerServices->GetCurrentProcessSystemId(&processId);
+ if (FAILED(m_pDebuggerServices->GetCurrentProcessSystemId(&processId)))
+ {
+ m_pHostServices->DestroyTarget();
+ return S_OK;
+ }
return m_pHostServices->UpdateTarget(processId);
}