通过Debug API监视进程异常

时间:2012-03-13 15:43:52

标签: debugging exception

开始使用示例代码的任何帮助都可以在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
实施方面的改进。
现在它有一个最终应用程序的初始骨架结构。

1 个答案:

答案 0 :(得分:1)

在我看来,你正在寻找用于理解的调试器编写资源,在这种情况下,你最好的起点是MSDN,这给出了应该如何处理的基础知识。从那里,你的应用程序和环境如何处理异常。

作为对实际代码的评论,请避免对PID进行硬编码,而应使用进程名称。