1、Process Explorer和Process Monitor软件下载
https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procmon
下载完,打开Process Explorer软件,菜单->File->Save As,可以把当前运行的进程名称记录在文本。再通过Beyond Compare对比软件查看差异,由此我们可以通过它来分析Visual Studio 2013编译和调试过程中究竟产生了哪些进程。
2、打开Visual Studio 2013,后台会产生devenv.exe进程
devenv.exe位于C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe
3、新建Win32控制台程序,然后编译,编译过程会产生以下进程:
MSBuild.exe -- 这个生成编译的发起者,统筹全局
mspdbsrv.exe -- Microsoft® Program Database
vcpkgsrv.exe -- Microsoft (R) Visual C++ Package Server
conhost.exe -- win32控制台窗口主机
cl.exe -- 真正的编译器,源码编译执行者
其中cl.exe位于C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe,这个进程生命周期比较短暂,编译完源码,cl进程就会被杀死。
MSBuild.exe位于C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe
4、调试
(1)调试过程会产生以下进程
conhost.exe -- win32控制台窗口主机
ConsoleApplication1.exe -- 用户程序
由此可见,调试使用的是VS自身的进程,没有额外产生其他进程。
(2)使用Process Monitor软件来观察:
打开软件->菜单->Filter->Filter...->Process Name contains devenv->Add
可以观察到,devenv.exe会访问相关文件,例如,这里只截取了部分注册表及文件:
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\Debugger
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0_Config\Debugger\CodeView Compilers
HKCU\Software\Microsoft\VisualStudio\12.0\AD7Metrics\Engine
......
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\vsdebugeng.impl.DLL
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\atlmfc.natvis
......