Visual Studio Debug下的Attach Process是什么原理

2025-05-22 15:09:37
推荐回答(2个)
回答(1):

Windows提供一套公共的API用于调试程序,也就是说你也可以自己写一个调试软件,调用这些API实现跟VS一样的功能。并且现有的软件里,很多调试器都支持attach to process的功能。

在Windows环境下,一个进程要debug另一个进程,在权限足够的情况下,有两种debug方式:

1、启动进程并debug(像一般VC那样);

2、直接attach到一个正在运行的进程上;

第一种模式:

创建进程(CreateProcess)时,在dwCreationFlags里加上DEBUG_PROCESS标志位

参见:

CreateProcess function (Windows)

Process Creation Flags (Windows)

进程创建以后就会停下来,等父进程调试它。

第二种模式:

直接attach到目标进程,使用DebugActiveProcess就可以了,参见:DebugActiveProcess function (Windows)

所以,Windows已经把所有你需要的工作都准备好了,至于自己是想做一个GUI还是命令行(比如gdb那种),完全就看自己的喜好。

回答(2):

这是Windows提供的功能,Visual Studio只是给你做了个GUI而已。你要是看完了MSDN关于怎么写Debugger的那一章的话,你也可以自己写一个。

对于普通的debugger来说,最麻烦的也就是配合pdb出结果了,读pdb的话Visual Studio自己带有一个dll给你用。