加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何在Windows上的控制台输出中断(设置断点)?

发布时间:2020-12-14 02:17:32 所属栏目:Windows 来源:网络整理
导读:背景: 我正在我的开发者PC上运行一个大型的nUnit测试套件(通过nunit-console),我在控制台窗口看到了一些垃圾输出. 被测单元确实涉及.NET代码以及底层的C和C库,我还没有找到谁在生成垃圾输出. 题: 是否有一个Windows API函数,其中所有控制台输出都通过? (
背景:

我正在我的开发者PC上运行一个大型的nUnit测试套件(通过nunit-console),我在控制台窗口看到了一些垃圾输出.

被测单元确实涉及.NET代码以及底层的C和C库,我还没有找到谁在生成垃圾输出.

题:

是否有一个Windows API函数,其中所有控制台输出都通过? (无论它来自哪里.)

我已经尝试在WriteConsole中设置一个断点,但是甚至没有从CRT捕获printf输出.是否有任何“中心”位置来设置断点以捕获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 documentation中使用ReadFile / WriteFile的控制台句柄操作更多

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读