本文整理汇总了C#中IDebugProcess2.GetInfo方法的典型用法代码示例。如果您正苦于以下问题:C# IDebugProcess2.GetInfo方法的具体用法?C# IDebugProcess2.GetInfo怎么用?C# IDebugProcess2.GetInfo使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IDebugProcess2
的用法示例。
在下文中一共展示了IDebugProcess2.GetInfo方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Event
public int Event(IDebugEngine2 engine, IDebugProcess2 process, IDebugProgram2 program,
IDebugThread2 thread, IDebugEvent2 debugEvent, ref Guid riidEvent, uint attributes)
{
if (process == null)
return VSConstants.S_OK;
string processName;
if (process.GetName((uint) enum_GETNAME_TYPE.GN_FILENAME, out processName) != VSConstants.S_OK)
return VSConstants.S_OK;
if (processName.EndsWith("vshost.exe"))
return VSConstants.S_OK;
var shortName = Path.GetFileName(processName);
if (debugEvent is IDebugProcessCreateEvent2)
{
Log.Instance.SetStatus("[attaching...] {0}", shortName);
Storage.Instance.SubscribeProcess(processName);
}
if (debugEvent is IDebugProcessDestroyEvent2)
{
Log.Instance.SetStatus("[detached] {0}", shortName);
Log.Instance.AppendLine("[detached] {0}", shortName);
}
if (debugEvent is IDebugLoadCompleteEvent2)
{
if (program != null)
{
string engineName;
Guid engineId;
if (program.GetEngineInfo(out engineName, out engineId) == VSConstants.S_OK)
{
var fields = new PROCESS_INFO[1];
if (process.GetInfo((uint)enum_PROCESS_INFO_FIELDS.PIF_PROCESS_ID, fields) != VSConstants.S_OK)
return VSConstants.S_OK;
Storage.Instance.SubscribeEngine(processName, engineId);
AttachCenter.Instance.Freeze();
Log.Instance.SetStatus("[attached] {0}", shortName);
Log.Instance.AppendLine("[attached] {0} ({1}) / {2}", shortName, fields[0].ProcessId.dwProcessId, engineName);
}
}
}
return VSConstants.S_OK;
}
示例2: Event
public int Event(IDebugEngine2 pEngine,
IDebugProcess2 pProcess,
IDebugProgram2 pProgram,
IDebugThread2 pThread,
IDebugEvent2 pEvent,
ref Guid riidEvent,
uint dwAttrib)
{
try
{
string threadName = null;
if (pThread != null && pEvent != null)
{
uint attributes;
pEvent.GetAttributes(out attributes);
if ( (uint)enum_EVENTATTRIBUTES.EVENT_SYNC_STOP == attributes)
{
HandleException.PrintFrames(pThread);
}
pThread.GetName(out threadName);
//ExtractFrameContent(pThread);
//IEnumDebugFrameInfo2 ppEnum = null;
}
Trace.WriteLine(string.Format("Event {0} Thread {1}", riidEvent, threadName ));
if (typeof(IDebugInterceptExceptionCompleteEvent2).GUID == riidEvent)
{
var interactionEvent = pEvent as IDebugInterceptExceptionCompleteEvent2;
HandleException.PrintFrames(pThread);
}
//HandleException.ProcessEvent(riidEvent, pThread);
if (typeof(IDebugProgramCreateEvent2).GUID == riidEvent)
{
// Add handle
}
if( false )
{
IDebugSessionEvent2 ev = pEvent as IDebugSessionEvent2;
var pInfo = new PROCESS_INFO[1];
if (pProcess != null)
{
pProcess.GetInfo((uint)enum_PROCESS_INFO_FIELDS.PIF_SESSION_ID, pInfo);
}
}
if (typeof(IDebugBreakEvent2).GUID == riidEvent)
{
// Might be interesting to get the statement line number here and emit.
var ev = pEvent as IDebugBreakEvent2;
}
if (riidEvent == typeof(IDebugEntryPointEvent2).GUID)
{
// This is when execution is just about to the start.
// I can't get the reference to the engine, pEngine is always null, and
// there doesn't seem to be an interface to fetch it (there is a query interface in docs, but not in dll!)
//string engineStr; Guid engineGuid;
//pProgram.GetEngineInfo(out engineStr, out engineGuid);
//var superEngine = pEngine as IDebugEngine3;
//if (superEngine != null)
//{
// superEngine.SetAllExceptions(enum_EXCEPTION_STATE.EXCEPTION_STOP_FIRST_CHANCE);
//}
}
else if (riidEvent == typeof(IDebugMessageEvent2).GUID)
{
var ev = pEvent as IDebugMessageEvent2;
var str = ""; uint type; string helpFile; uint helpId;
//var suc = ev.GetMessage(new enum_MESSAGETYPE[] { enum_MESSAGETYPE.MT_REASON_EXCEPTION }, out str, out type, out helpFile, out helpId);
uint messageType;
var suc = ev.GetMessage( out messageType, out str, out type, out helpFile, out helpId);
if (suc == VSConstants.S_OK)
{
if (str.StartsWith("A first chance exception of type"))
{
if (pThread != null)
{
//ExtractFrameContent(pThread);
HandleException.PrintFrames(pThread);
}
// First chance exception thrown...but can't figure out how to get stack trace :(
}
}
}
// This interface is sent by the debug engine (DE) to the session debug manager (SDM) when a thread is created in a program being debugged.
//if (riidEvent == Guid.Parse("{2090ccfc-70c5-491d-a5e8-bad2dd9ee3ea}"))
{
if (pThread != null)
{
// ExtractFrameContent(pThread);
}
}
// Process of exception handling.
//.........这里部分代码省略.........