b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

ximage getbits?opengl?OutputDebugString的原理及模拟源码

电脑杂谈  发布时间:2016-06-20 23:05:12  来源:网络整理

你是否正在寻找关于outputdebugstring的内容?让我把最实在的东西奉献给你:

outputdebugstring_ximage getbits_opengl

调试某些程序时用outputdebugstring打印,用debugview输出打印比较方便,例如windows服务程序。但debugview会输出任何windows软件程序的打印信息,如迅雷和flashget。虽然debugview提供了输出过滤功能,但每次观察其输出都要过滤也很不方便,

于是就想自己模拟实现OutputDebugString函数,然后写个对应的debugview来打印输出,这样用自己的outputdebugstring来打印用自己的debugview来输出打印就方便多了。

我封装的lib接口Myoutputdebugstring和对应的Mydebugview下载地址:

网上早有人对outputdebugstring原理做过研究,这里我借花献佛,以下为转载。

在应用程序和调试器之间传递数据是通过一个 4KB 大小的共享内存块完成的,并有一个互斥量和两个事件对象用来保护对他的访问,。下面就是相关的四个内核对象:

对象名称 对象类型

DBWinMutex Mutex

DBWIN_BUFFER Section (共享内存)

DBWIN_BUFFER_READY Event

DBWIN_DATA_READY Event

互斥量通常一直保留在系统中,其他三个对象仅当调试器要接收信息才出现。事实上 - 如果一个调试器发现后三个对象已经存在,它会拒绝运行。

当 DBWIN_BUFFER 出现时,会被组织成以下结构。进程 ID 显示信息的来源,字符串数据填充这 4K 的剩余部分。按照约定,信息的末尾总是包括一个 NULL 字节。

struct dbwin_buffer { DWORD dwProcessId; char data[4096-sizeof(DWORD)]; };

outputdebugstring() 被应用调用时,它执行以下步骤。注意在任意位置的错误都将放弃整个事情,调试请求被认为是什么也不做(不会发送字符串)。

在调试器端会简单一点。互斥量根本不需要,如果事件对象和/或共享内存对象已经存在,则假定其他调试器已经在运行。系统中任意时刻只能存在一个调试器。

这使我们认为这决不是一种低消耗的发送信息的方法,应用程序的运行速度会受到调试器的左右。

以上就是关于outputdebugstring的全部内容,相信你一定会非常满意。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-10298-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...