public void CreateProcess(ICorDebugProcess pProcess) { EnterCallback(PausedReason.Other, "CreateProcess", pProcess); // Process is added in NDebugger.Start ExitCallback_Continue(); }
public void CreateAppDomain(ICorDebugProcess pProcess, ICorDebugAppDomain pAppDomain) { EnterCallback(PausedReason.Other, "CreateAppDomain", pAppDomain); pAppDomain.Attach(); ExitCallback_Continue(); }
public void DestroyConnection(ICorDebugProcess pProcess, uint dwConnectionId) { ManagedCallback managedCallback = GetProcessCallbackInterface(pProcess); if (managedCallback != null) { managedCallback.DestroyConnection(pProcess, dwConnectionId); } }
public void CreateConnection(ICorDebugProcess pProcess, uint dwConnectionId, IntPtr pConnName) { ManagedCallback managedCallback = GetProcessCallbackInterface(pProcess); if (managedCallback != null) { managedCallback.CreateConnection(pProcess, dwConnectionId, pConnName); } }
public void ExitProcess(ICorDebugProcess pProcess) { ManagedCallback managedCallback = GetProcessCallbackInterface(pProcess); if (managedCallback != null) { managedCallback.ExitProcess(pProcess); } }
public void ExitAppDomain(ICorDebugProcess pProcess, ICorDebugAppDomain pAppDomain) { ManagedCallback managedCallback = GetProcessCallbackInterface(pProcess); if (managedCallback != null) { managedCallback.ExitAppDomain(pProcess, pAppDomain); } }
public void DebuggerError(ICorDebugProcess pProcess, int errorHR, uint errorCode) { ManagedCallback managedCallback = GetProcessCallbackInterface(pProcess); if (managedCallback != null) { managedCallback.DebuggerError(pProcess, errorHR, errorCode); } }
public void ControlCTrap(ICorDebugProcess pProcess) { ManagedCallback managedCallback = GetProcessCallbackInterface(pProcess); if (managedCallback != null) { managedCallback.ControlCTrap(pProcess); } }
public void DebuggerError(ICorDebugProcess pProcess, int errorHR, uint errorCode) { EnterCallback(PausedReason.DebuggerError, "DebuggerError", pProcess); string errorText = String.Format("Debugger error: \nHR = 0x{0:X} \nCode = 0x{1:X}", errorHR, errorCode); if ((uint)errorHR == 0x80131C30) { errorText += "\n\nIf you are running a 64-bit system this setting might help:\nProject -> Project Options -> Compiling -> Target CPU = 32-bit Intel"; } System.Windows.Forms.MessageBox.Show(errorText); ExitCallback_Paused(); }
public ManagedCallback GetProcessCallbackInterface(ICorDebugProcess pProcess) { Process process = debugger.GetProcess(pProcess); if (process == null) { return(null); } try { int isRunning = process.CorProcess.IsRunning; } catch (COMException e) { // 0x80131301: Process was terminated if ((uint)e.ErrorCode == 0x80131301) { process.TraceMessage("Ingoring callback of exited process"); return(null); } } return(process.CallbackInterface); }
void EnterCallback(PausedReason pausedReason, string name, ICorDebugProcess pProcess) { process.TraceMessage("Callback: " + name); System.Diagnostics.Debug.Assert(process.CorProcess == pProcess); // Check state if (process.IsRunning || // After break is pressed we may receive some messages that were already queued process.PauseSession.PausedReason == PausedReason.ForcedBreak || // ExitProcess may be called at any time when debuggee is killed name == "ExitProcess") { if (process.IsPaused && process.PauseSession.PausedReason == PausedReason.ForcedBreak && name != "ExitProcess") { process.TraceMessage("Processing post-break callback"); // Continue the break, process is still breaked because of the callback process.Continue(); pauseProcessInsteadOfContinue = true; } else { pauseProcessInsteadOfContinue = false; } // Remove expired threads and functions foreach (Thread thread in process.Threads) { thread.CheckExpiration(); } process.NotifyPaused(new PauseSession(pausedReason)); } else { throw new DebuggerException("Invalid state at the start of callback"); } }
public void DestroyConnection(ICorDebugProcess pProcess, uint dwConnectionId) { EnterCallback(PausedReason.Other, "DestroyConnection", pProcess); ExitCallback_Continue(); }
public void CreateConnection(ICorDebugProcess pProcess, uint dwConnectionId, IntPtr pConnName) { EnterCallback(PausedReason.Other, "CreateConnection", pProcess); ExitCallback_Continue(); }
public void ExitProcess(ICorDebugProcess pProcess) { EnterCallback(PausedReason.Other, "ExitProcess", pProcess); process.NotifyHasExpired(); }
public void ExitAppDomain(ICorDebugProcess pProcess, ICorDebugAppDomain pAppDomain) { EnterCallback(PausedReason.Other, "ExitAppDomain", pAppDomain); ExitCallback_Continue(); }
public void ControlCTrap(ICorDebugProcess pProcess) { EnterCallback(PausedReason.ControlCTrap, "ControlCTrap", pProcess); ExitCallback_Paused(); }