网上很多帖子讲解调试器的理论、架构与实现,但是很少有帖子涉及到调试器与被调试进程的拆离以及如何结束被调试进程(换了百度、谷歌、必应均没有搜到相关的帖子) 调用windowsAPI DebugActiveProcessStop 停止调试器调试指定的进程 参数进程ID 可以在调试器创建进程时调用 CreateProcess 的最后一个参数 lpProcessInformation 中记录 拆离调试器与被调试进程别忘记修复断点,调用 ContinueDebugEvent 继续执行被调试线程 windows默认调试器退出时终止被调试进程, KillOnExit 如果为TRUE,则线程将在退出时终止所有附加进程(请注意,这是默认设置); 被调试进程只有与被调试进程拆离后,才可以正常的结束
我在这里简单说一下实现拆离调试器与被调试进程
BOOL DebugActiveProcessStop( DWORD dwProcessId );
创建完成调试进程后,别忘记调用 CloseHandle 关闭 lpProcessInformation 中的 进程与线程句柄BOOL CreateProcessW( LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ); typedef struct _PROCESS_INFORMATION { HANDLE hProcess; HANDLE hThread; DWORD dwProcessId; DWORD dwThreadId; } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
BOOL ContinueDebugEvent( DWORD dwProcessId, DWORD dwThreadId, DWORD dwContinueStatus );
调试器退出时拆离被调试进程
我们可以调用 DebugSetProcessKillOnExit 参数传入FALSE,来修改调试器退出时要执行的操作
可以多次调用此函数以根据需要更改操作BOOL DebugSetProcessKillOnExit( BOOL KillOnExit );
KillOnExit 如果为FALSE,线程将与退出时正在调试的所有进程分离。结束被调试进程
调用 TerminateProcess 终止指定的进程及其所有线程BOOL TerminateProcess( HANDLE hProcess, UINT uExitCode ); /* 例:*/ TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID), 0);
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算