c++ - 是否可以在 Windows 上获取 cc1plus.exe 编译详细信息?
问题描述
我的应用程序正在通过 g++ 或 clang++ 在 Windows 上跟踪编译过程。编译一个触发 g++ 的 make 项目。
myapp make
然后进程树看起来:
├── make.exe
├── g++.exe
└── cc1plus.exe
目前,我可以获得 pid、parentid 和一些关于make
不幸不是make
子进程的信息。我正在尝试通过 Windows 本机 API 和 win32api 访问这些进程。myapp
应该在没有管理员权限的情况下运行。我不确定是否可以访问make
s 子进程和详细的编译过程信息,例如预编译、链接等。有ETW API
但它强制管理员权限,所以我不是在寻找它。任何信息都会对我有很大帮助。
PS:通过ProcMon
,一个windows工具,我可以看到全部细节,但我想通过我的自定义应用程序自动化这个过程。ProcMon
需要管理员权限。
解决方案
我通过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();
}
推荐阅读
- java - 使用 Java 8,如何在列表中为 obj[4] 设置字符串常量
- java - 将 AspectJ @DeclareParents defaultImpl 代码用作依赖项时不使用
- vb.net - VB.NET - 有没有办法以编程方式创建调度程序只是为了调用某个 url/api?
- sql - 条件是在 oracle sql 中 allotment_date-present 日期之间的天数大于 91 天
- javascript - 如何在 vs 代码中更新我的配置文件?
- forms - Thymeleaf,默认值不会出现在我的更新表单中
- cassandra - 喜欢用“。”查询 春季JpaRepository中的字符串查询中的符号
- excel - 对多维 SSAS 的 DAX 查询不正确
- css - 没有 React 的 Material-UI / 只有普通的 HTML、CSS 和 JS?可能的?
- locust - Locust 在没有 docker 用户界面的分布式模式下不生成 failures.csv 和 expections.csv