捕获OutputDebugString 其实这个函数只是在一段共享内存中放入了输出的文本,通过一些同步的内核对象通,调试器根据这些对象就可以得到相应的输出。

下面就是一个简单的程序,它能够获取所有的调试信息输出,如果要获取某个进程的文本输出,需要做一些筛选。

#include <Windows.h>
#include <process.h>
#pragma pack(push)
#pragma pack(1)
typedef struct __DEBUGBUFFER
{
DWORD sz;      //进程id
char szString[4096 - sizeof(DWORD)];
} DEBUGBUFFER, *PDEBUGBUFFER;
#pragma pack(pop)
;
#define MAX_DEBUG_BUF_LEN (4096)
#define _Try __try
#define _Finally __finally
void aaa(void* p)
{
while(TRUE)
{
Sleep(1000);
OutputDebugStringA("GGGGGGGGG");
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//  _beginthread(aaa,NULL,0);
HANDLE m_hReadyEvent;
DWORD m_dwResult;
HANDLE hMapping = NULL;
HANDLE hAckEvent = NULL;
PDEBUGBUFFER pdbBuffer = NULL;
//TCHAR tzBuffer[MAX_DEBUG_BUF_LEN];
_Try
{
#define _LeaveIf(expr) if(expr == TRUE) \
return FALSE;
// 设置初始结果
m_dwResult = ERROR_INVALID_HANDLE;
// 打开事件句柄
hAckEvent = CreateEvent(NULL, FALSE, FALSE, TEXT("DBWIN_BUFFER_READY"));
_LeaveIf(hAckEvent == NULL);
m_hReadyEvent = CreateEvent(NULL, FALSE, FALSE, TEXT("DBWIN_DATA_READY"));
_LeaveIf(m_hReadyEvent == NULL);
// 创建文件映射
hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, MAX_DEBUG_BUF_LEN, TEXT("DBWIN_BUFFER"));
_LeaveIf(hMapping == NULL);
// 映射调试缓冲区
pdbBuffer = (PDEBUGBUFFER) MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
_LeaveIf(pdbBuffer == NULL);
// 循环
for (m_dwResult = ERROR_SIGNAL_PENDING; (m_dwResult == ERROR_SIGNAL_PENDING); )
{
// 等待缓冲区数据
SetEvent(hAckEvent);
if (WaitForSingleObject(m_hReadyEvent, INFINITE) == WAIT_OBJECT_0)
{
// 如果是继续等待,否则表示主线程发出了停止信号,退出当前线程
if (m_dwResult == ERROR_SIGNAL_PENDING)
{
// 添加新项
printf(pdbBuffer->szString);
}
}
else
{
// 等待失败
m_dwResult = WAIT_ABANDONED;
}
}
}
_Finally
{
#define _SafeCloseHandle(handle) if(handle != NULL) \
CloseHandle(handle);
// 释放
if (pdbBuffer)
{
UnmapViewOfFile(pdbBuffer);
}
_SafeCloseHandle(hMapping);
_SafeCloseHandle(m_hReadyEvent);
_SafeCloseHandle(hAckEvent);
// 返回结果
return m_dwResult;
}
}

捕获OutputDebugString相关推荐

  1. 如何查看OutputDebugString的输出?[英]How to view output of OutputDebugString?

    I want to use OutputDebugString() in my application and then have the option to show it in a separat ...

  2. 海康威视IPCamera图像捕获 二种方法

    所使用海康威视摄像头型号:DS-2CD4026FWD-(A)(P) 海康威视IPCamera图像捕获方法有两种: (1)利用SDK里面的NET_DVR_CaptureJPEGPicture_NEW进行 ...

  3. 调试输出信息OutPutDebugString

    OutPutDebugString(TEXT("在调试器里输出的类容")); #define MAXDUGBUFF 20 #define OutError(ErrorEvent) ...

  4. windows日志捕获工具-DebugView使用教程

    debugview 是一款捕获windows桌面系统程序中由TRACE(debug版本)和OutputDebugString输出的信息. 1.双击打开DebugView.exe工具,看到如下界面: 其 ...

  5. 海康威视IPCamera图像捕获方法:捕获实时流,将实时流解码成YV12,然后转换成RGB

    将他的MFC工程相关的代码抠出来,重组.于是实现了捕获YV12格式的视频流的功能,光有YV12还是不行的,需要将YV12转成YUV4:4:4的,然后再将YUV色度空间转换成RGB色度空间,这个过程是在 ...

  6. 捕获海康威视IPCamera图像,转成OpenCV能够处理的图像(二)

    海康威视IPCamera图像捕获 捕获海康威视IPCamera图像.转成OpenCV能够处理的IplImage图像(一) 捕获海康威视IPCamera图像.转成OpenCV能够处理的IplImage图 ...

  7. 捕获海康威视IPCamera图像,转成OpenCV可以处理的图像(二)

    捕获海康威视IPCamera图像,转成OpenCV可以处理的图像(二) 标签: 捕获图像海康威视IPCameraOpenCVIplImage 2014-06-16 18:59 15424人阅读 评论( ...

  8. OutputDebugString不在DebugView中显示

    此函数的功能: 发送一个字符串到当前应用程序的调试器中. 因此,它不输出有以下几种情况: 1.当前的应用程序已经有调试器了,比如在Visual Studio中运行的程序,Vistual Studio时 ...

  9. Go 知识点(14) — Go 多协程(单个协程触发panic会导致其它所有协程挂掉,每个协程只能捕获到自己的 panic 不能捕获其它协程)

    在多协程并发环境下,我们常常会碰到以下两个问题.假设我们现在有 2 个协程,我们叫它们协程 A 和 B . [问题1]如果协程 A 发生了 panic ,协程 B 是否会因为协程 A 的 panic ...

最新文章

  1. 胡渊鸣的「太极图形」又融了5000万美元,下一步:3D内容创作平台
  2. TOAD FOR MYSQL 进行数据插入时乱码的解决办法---MariaDB 5.5
  3. C++--day06
  4. 阿里云西安ACE同城会 | 钉钉生态应用促进企业信息化实战沙龙
  5. 获取iOS顶部状态栏和Navigation的高度
  6. 【学习笔记】路由算法与路由协议:RIP协议与距离向量算法、OSPF协议与链路状态算法、BGP协议
  7. php tea 算法 源码,PHP教程:TEA算法实现
  8. 设计模式之MVC设计模式初阶
  9. cadence元件编号更新_OrCAD教程:如何对元件进行替换与更新
  10. 抓包工具之fiddler
  11. 全球IP将告罄,美国已摇号限购
  12. android修改shell串口号,[Note] 2021-01-15 Android shell/串口中使用 wpa_cli 连接Wi-Fi
  13. pack文件如何安装
  14. 【源码】6个超炫酷的HTML5电子书翻页动画
  15. mysql8.0压缩包安装
  16. 如果恰巧有一台超微服务器,如何调节风扇转速
  17. zblog mysql修改_ZBlog教程 之 修改ZBlog数据库前缀
  18. 代码风格检查工具vera++
  19. 洛谷P2404 自然数的拆分问题(回溯)
  20. 必应输入法,搜狗输入法->当前日期快捷显示设置

热门文章

  1. 关于ul右浮动排列内容倒序的问题
  2. 南瑞研发电力业务基础软件平台通过国家电网公司验收
  3. 【解决方案】Windows下C盘空间越来越小,空间清理方式
  4. 用C语言编程网上购物系统,基于c语言的购物系统.doc
  5. 【论文阅读】NEF:用于从多视图重建 3D 参数曲线的神经边缘场
  6. 《python基础教程》答案(第六章)
  7. Latex 双栏中使用单栏标题
  8. MySQL为什么使用B+树作为索引? 索引原理?
  9. python猜数字小游戏(内附完整源码)
  10. K210基础实验—定时器