开始使用示例代码的任何帮助都可以在C++/CLI Win32 debugger library for x86查找以监控进程异常。
我制作的一些代码是:
using System; using DebugLibrary; namespace DebugTeste01 { class Program { static void Main(string[] args) { DebugUtil.DebugActiveProcess(4932); DebugEvent de = new DebugEvent(); ThreadContext tc = new ThreadContext(); LDTEntry ldte = new LDTEntry(); do { debug_evt = DebugUtil.WaitForDebugEvent(0xffffffff); de = (DebugEvent)debug_evt; Process proc = Process.GetProcessById(de.processId); object meminfo = DebugUtil.GetMemoryInfo(proc.Handle); //... object modinf = DebugUtil.GetModuleInfo(proc.Handle); //... switch (debug_evt.GetType().ToString()) { case "DebugLibrary.DebugEvent_CreateProcess": { DebugEvent_CreateProcess decp = (DebugEvent_CreateProcess)debug_evt; //some action, logging, etc. } break; case "DebugLibrary.DebugEvent_LoadDll": { DebugEvent_LoadDll dect = (DebugEvent_LoadDll)debug_evt; //some action, logging, etc. } break; case "DebugLibrary.DebugEvent_CreateThread": { DebugEvent_CreateThread dect = (DebugEvent_CreateThread)debug_evt; //some action, logging, etc. } break; case "DebugLibrary.DebugEvent_ExitThread": { DebugEvent_ExitThread dect = (DebugEvent_ExitThread)debug_evt; //some action, logging, etc. } break; case "DebugLibrary.DebugEvent_Exception": { DebugEvent_Exception dect = (DebugEvent_Exception)debug_evt; ExceptionRecord exbp = dect.exceptionRecord; switch (exbp.GetType().ToString()) { case "Breakpoint": { //some action, logging, etc. exbp = null; } break; case "AccessViolation": { //some action, logging, etc. exbp = null; } break; //more case } } break; default: { //some action, logging, etc. debug_evt = null; } break; } try { DebugUtil.ContinueDebugEvent(de.processId, de.threadId, false); } catch { break; } } while ( true ); } } }
[编辑] 03/14/2012
好文章:Using the Windows Debugging API
[编辑] 03/14/2012
实施方面的改进。
现在它有一个最终应用程序的初始骨架结构。
答案 0 :(得分:1)
在我看来,你正在寻找用于理解的调试器编写资源,在这种情况下,你最好的起点是MSDN,这给出了应该如何处理的基础知识。从那里,你的应用程序和环境如何处理异常。
作为对实际代码的评论,请避免对PID进行硬编码,而应使用进程名称。