在程序中访问OutputDebugString的信息
来源:互联网 发布:java编译成class工具 编辑:程序博客网 时间:2024/06/16 02:21
///////////////////////// 一个数据结构,放在最外面的
typedef struct dbwin_buffer
{
DWORD dwProcessId;
char data[4096-sizeof(DWORD)];
}DEBUGBUFFER,*PDEBUGBUFFER;
/////////////////////////参数-----------放在form1中的
static HANDLE m;
static HANDLE m_AckEvent;
static HANDLE m_ReadyEvent;
static HANDLE m_SharedFile;
static HANDLE m_SharedMem;
static Thread^ m_Capturer;
static PDEBUGBUFFER pdbBuffer;
//////////////////////写在一个方法中
//----------------------OpenMutex
m = OpenMutex( MUTEX_ALL_ACCESS, false, "DBWinMutex" );
if (m == NULL) {
throw gcnew Exception("Failed to create event 'DBWinMutex'");
}
//---------------------OpenEvent DBWIN_BUFFER_READY
m_AckEvent = OpenEvent(EVENT_ALL_ACCESS,false,"DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
m_AckEvent = CreateEvent(NULL, false, true, "DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER_READY'");
}
}
//-----------------------OpenEvent DBWIN_DATA_READY
m_ReadyEvent = OpenEvent(SYNCHRONIZE,FALSE,"DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
m_ReadyEvent = CreateEvent(NULL, false, false, "DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_DATA_READY'");
}
}
//-----------------------OpenFileMapping DBWIN_BUFFER
m_SharedFile = OpenFileMapping(FILE_MAP_READ,false,"DBWIN_BUFFER");
if (m_SharedFile == NULL) {
m_SharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "DBWIN_BUFFER");
if (m_SharedFile == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER'");
}
}
//可以就当是那段的内容 映射调试缓冲区
m_SharedMem = MapViewOfFile(m_SharedFile,SECTION_MAP_READ,0,0,0);
pdbBuffer = (PDEBUGBUFFER) MapViewOfFile(m_SharedFile, SECTION_MAP_READ, 0, 0, 0);
if (m_SharedMem == NULL) {
throw gcnew Exception("Failed to create event 'm_SharedMem'");
}
// Start a new thread where we can capture the output
// of OutputDebugString calls so we don't block here.
m_Capturer = gcnew Thread(gcnew ThreadStart(Capture));
m_Capturer->Start();
////////////////////////
////////////////////////Capture 方法
private: static void Capture() {
try {
char *pp ;
int pid;
OutputDebugString("Hello World!" );
while (true) {
SetEvent(m_AckEvent);
int ret = WaitForSingleObject(m_ReadyEvent, 1000);
if (!m_Capturer)
break;
if (ret == WAIT_OBJECT_0){
pid = pdbBuffer->dwProcessId;
pp = pdbBuffer->data;
}
}
} catch(ios::failure& e){
throw gcnew Exception("Failed to create event 'Thread'");
// Cleanup
} finally {
aDispose();
}
}
//////////////////////////int2str 从int到String的转换
static
String^ int2str(int num)
{
if (num == 0 )
return " 0 " ;
String^ str = "" ;
int num_ = num > 0 ? num : - 1 * num;
while (num_)
{
str = ( char )(num_ % 10 + 48 ) + str;
num_ /= 10 ;
}
if (num < 0 )
str = " - " + str;
return str;
}
/////////////////////////////aDispose 方法
private:
static void aDispose() {
//if(!m_Capturer){
// WaitForSingleObject(m_Capturer, INFINITE);
//}
// Close AckEvent
if (m_AckEvent != NULL) {
if (!CloseHandle(m_AckEvent)) {
throw gcnew Exception("Failed to create event 'm_AckEvent'");
}
m_AckEvent = NULL;
}
// Close ReadyEvent
if (m_ReadyEvent != NULL) {
if (!CloseHandle(m_ReadyEvent)) {
throw gcnew Exception("Failed to create event 'm_ReadyEvent'");
}
m_ReadyEvent = NULL;
}
// Close SharedFile
if (m_SharedFile != NULL) {
if (!CloseHandle(m_SharedFile)) {
throw gcnew Exception("Failed to create event 'm_SharedFile'");
}
m_SharedFile = NULL;
}
// Unmap SharedMem
if (m_SharedMem != NULL) {
if (!UnmapViewOfFile(m_SharedMem)) {
throw gcnew Exception("Failed to create event 'm_SharedMem'");
}
m_SharedMem = NULL;
}
// Close our mutex
if (m != NULL) {
CloseHandle(m);
m = NULL;
}
}
typedef struct dbwin_buffer
{
DWORD dwProcessId;
char data[4096-sizeof(DWORD)];
}DEBUGBUFFER,*PDEBUGBUFFER;
/////////////////////////参数-----------放在form1中的
static HANDLE m;
static HANDLE m_AckEvent;
static HANDLE m_ReadyEvent;
static HANDLE m_SharedFile;
static HANDLE m_SharedMem;
static Thread^ m_Capturer;
static PDEBUGBUFFER pdbBuffer;
//////////////////////写在一个方法中
//----------------------OpenMutex
m = OpenMutex( MUTEX_ALL_ACCESS, false, "DBWinMutex" );
if (m == NULL) {
throw gcnew Exception("Failed to create event 'DBWinMutex'");
}
//---------------------OpenEvent DBWIN_BUFFER_READY
m_AckEvent = OpenEvent(EVENT_ALL_ACCESS,false,"DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
m_AckEvent = CreateEvent(NULL, false, true, "DBWIN_BUFFER_READY");
if (m_AckEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER_READY'");
}
}
//-----------------------OpenEvent DBWIN_DATA_READY
m_ReadyEvent = OpenEvent(SYNCHRONIZE,FALSE,"DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
m_ReadyEvent = CreateEvent(NULL, false, false, "DBWIN_DATA_READY");
if (m_ReadyEvent == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_DATA_READY'");
}
}
//-----------------------OpenFileMapping DBWIN_BUFFER
m_SharedFile = OpenFileMapping(FILE_MAP_READ,false,"DBWIN_BUFFER");
if (m_SharedFile == NULL) {
m_SharedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4096, "DBWIN_BUFFER");
if (m_SharedFile == NULL) {
throw gcnew Exception("Failed to create event 'DBWIN_BUFFER'");
}
}
//可以就当是那段的内容 映射调试缓冲区
m_SharedMem = MapViewOfFile(m_SharedFile,SECTION_MAP_READ,0,0,0);
pdbBuffer = (PDEBUGBUFFER) MapViewOfFile(m_SharedFile, SECTION_MAP_READ, 0, 0, 0);
if (m_SharedMem == NULL) {
throw gcnew Exception("Failed to create event 'm_SharedMem'");
}
// Start a new thread where we can capture the output
// of OutputDebugString calls so we don't block here.
m_Capturer = gcnew Thread(gcnew ThreadStart(Capture));
m_Capturer->Start();
////////////////////////
////////////////////////Capture 方法
private: static void Capture() {
try {
char *pp ;
int pid;
OutputDebugString("Hello World!" );
while (true) {
SetEvent(m_AckEvent);
int ret = WaitForSingleObject(m_ReadyEvent, 1000);
if (!m_Capturer)
break;
if (ret == WAIT_OBJECT_0){
pid = pdbBuffer->dwProcessId;
pp = pdbBuffer->data;
}
}
} catch(ios::failure& e){
throw gcnew Exception("Failed to create event 'Thread'");
// Cleanup
} finally {
aDispose();
}
}
//////////////////////////int2str 从int到String的转换
static
String^ int2str(int num)
{
if (num == 0 )
return " 0 " ;
String^ str = "" ;
int num_ = num > 0 ? num : - 1 * num;
while (num_)
{
str = ( char )(num_ % 10 + 48 ) + str;
num_ /= 10 ;
}
if (num < 0 )
str = " - " + str;
return str;
}
/////////////////////////////aDispose 方法
private:
static void aDispose() {
//if(!m_Capturer){
// WaitForSingleObject(m_Capturer, INFINITE);
//}
// Close AckEvent
if (m_AckEvent != NULL) {
if (!CloseHandle(m_AckEvent)) {
throw gcnew Exception("Failed to create event 'm_AckEvent'");
}
m_AckEvent = NULL;
}
// Close ReadyEvent
if (m_ReadyEvent != NULL) {
if (!CloseHandle(m_ReadyEvent)) {
throw gcnew Exception("Failed to create event 'm_ReadyEvent'");
}
m_ReadyEvent = NULL;
}
// Close SharedFile
if (m_SharedFile != NULL) {
if (!CloseHandle(m_SharedFile)) {
throw gcnew Exception("Failed to create event 'm_SharedFile'");
}
m_SharedFile = NULL;
}
// Unmap SharedMem
if (m_SharedMem != NULL) {
if (!UnmapViewOfFile(m_SharedMem)) {
throw gcnew Exception("Failed to create event 'm_SharedMem'");
}
m_SharedMem = NULL;
}
// Close our mutex
if (m != NULL) {
CloseHandle(m);
m = NULL;
}
}
- 在程序中访问OutputDebugString的信息
- tip : 运行x64程序时, 用debugview收不到X64程序里OutputDebugString打印出的信息
- 服务程序使用OutputDebugString,DbgView接收不到调试信息问题
- 怎样在代码中使用Debug的调试?另外附带完整的使用流程------OutputDebugString函数
- 在程序中打印出程序堆栈的信息
- 在B程序中访问A程序的ConentProvider
- OutputDebugString输出调试信息
- 调试输出信息OutPutDebugString
- 调试输出信息OutPutDebugString
- OutputDebugString输出调试信息
- win32使用OutputDebugString输出调试信息的方法
- 在程序中发送短信息的三种方式
- 在.NET程序中如何访问水晶报表的元素
- 如何在.net 程序中访问 office文档的属性
- 程序访问信息
- 在友元中访问类的隐藏信息
- Microsoft Visual Studio 中printf的替代函数OutputDebugString
- 在程序异常中记录堆栈信息
- 隱藏GridView 欄位
- 急找LOTUS的同行
- 如今找一个好的程序员真难啊!
- Cross Compile "bluez-4.18" Arm-xScale Platform (原创)
- XmlDocument..::.CreateProcessingInstruction
- 在程序中访问OutputDebugString的信息
- “由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。”
- MySQL字符集问题解决方法(包括改配置文件、命令行修改和JDBC的问题)
- 网络管理技术核心:保证关键业务持续性
- core dump
- 内核调试的问题
- 假招聘内幕:我们根本不需要很多人
- Harmonious layouts for n queens in a n*n chessboard
- 10大最佳古怪网站