首页 > 解决方案 > 是否可以在 Windows 上获取 cc1plus.exe 编译详细信息?

问题描述

我的应用程序正在通过 g++ 或 clang++ 在 Windows 上跟踪编译过程。编译一个触发 g++ 的 make 项目。

myapp make然后进程树看起来:

├── make.exe
            ├── g++.exe
                    └── cc1plus.exe

目前,我可以获得 pid、parentid 和一些关于make不幸不是make子进程的信息。我正在尝试通过 Windows 本机 API 和 win32api 访问这些进程。myapp应该在没有管理员权限的情况下运行。我不确定是否可以访问makes 子进程和详细的编译过程信息,例如预编译、链接等。有ETW API但它强制管理员权限,所以我不是在寻找它。任何信息都会对我有很大帮助。

PS:通过ProcMon,一个windows工具,我可以看到全部细节,但我想通过我的自定义应用程序自动化这个过程。ProcMon需要管理员权限。

标签: c++windows

解决方案


我通过windows debug api找到了解决方案。WinBase.h如果您更改DEBUG_PROCESS为以下选项

#define DEBUG_PROCESS                     0x00000001
#define DEBUG_ONLY_THIS_PROCESS           0x00000002
#define CREATE_SUSPENDED                  0x00000004
#define DETACHED_PROCESS                  0x00000008

直到标志,您将检索过程信息。

if (!CreateProcess(0, const_cast<TCHAR *>(cmdLine.GetString()), 0, 0, true, DEBUG_PROCESS,
        0, 0, &startupInfo, &ProcessInformation))
    {
        std::ostringstream oss;
        oss << GetLastError();

    }

推荐阅读