Mar*_* Ba 5 windows console winapi visual-c++
背景:
我正在我的开发者PC上运行一个大型的nUnit测试套件(通过nunit-console),我在控制台窗口看到了一些垃圾输出.
被测单元确实涉及.NET代码以及底层的C++和C库,我还没有找到谁在生成垃圾输出.
题:
是否有一个Windows API函数,其中所有控制台输出都通过?(无论它来自哪里.)
我已经尝试在内部设置一个断点WriteConsole但是甚printf至没有捕获CRT的输出.是否有任何"中心"位置来设置断点以捕获Windows应用程序中的所有控制台输出?(有些Nt...功能?)
控制台 I/O 在 Windows 上调用 ReadFile 和 WriteFile。WriteFile 是控制台输出的例程。最好挂钩或断点 WriteFile 并过滤为其指定的句柄。不要将实际的文件 I/O 误认为是控制台句柄上的操作。
要获取用于 Windows 进程上控制台输出的正确句柄:
GetStdHandle(STD_OUTPUT_HANDLE);
或者,使用 CreateFile 打开控制台输出句柄并指定 CONOUT$ 也可以,也建议这样做:
HANDLE console_output = CreateFileA("CONOUT$", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
这将返回您需要在 WriteFile 调用中监视的句柄。就像使用挂钩一样,您可以指定断点的条件并检查调用中是否有正确的控制台句柄。
Microsoft 文档中有更多有关使用 ReadFile/WriteFile 对控制台句柄进行操作的信息
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |