DebugView輸出調試信息

在寫windows程序時,需要輸出一些調試信息,這里介紹一種極其方便的方法。即使用OutputDebugString 在Debug模式下輸出調試信息,在Release模式下不輸出。

我們可以在VS的集成平臺上輸出調試信息,也可以使用DebugView來查看調試信息。

1.)DebugView圖文教程

1、DbgView界面和監控方法

打開軟件后,頂部工具欄中選擇監控主機。先看連接本地機調試,點擊“Connect Local”即可。

在這個工具欄上,主要看幾個圖標

此按鈕,表示是否開啟捕獲服務

此按鈕,表示是否捕獲系統內核的Debug信息

此按鈕,表示是否捕獲一般Win32應用,也就相當于我們的應用的Debug信息

?

注意:只有調用了WinDebug中方法的地方的輸出Debug信息才能被DebugView捕獲。

?

再來看看捕獲的應用信息:將打開兩個按鈕的叉叉去掉,就會看到DebugView可能輸出一些信息。如下圖:?

?這些都是系統中的應用調用WinAPI所輸出的Debug信息。但是只有紅色部分是我們的Demo所輸出的信息。

此時我們可以新建過濾器,只查看我們自己想看到的信息打開后我們看到下圖

?

在Include和Exclude,分別表示Debug Print的內容“包含”“不包含”的字符串。

例如在include中輸入:GTA

?

點擊OK后

?

DebugView就會只顯示GTA開頭的Debug信息,因此在寫程序時,為了監控方便,我們可以將Debug信息分類,以不同的前綴或標志為約束,統一Debug輸出格式,方便以后排除和捕獲系統異常等情況。

Exclude與之相反,這里不介紹了。

另外說說,這個按鈕表面顯示的記錄條數。

??

2、遠程捕獲

可以在本機調試捕獲服務器上的Debug信息。

在服務器上新建dbgView.exe程序的快捷方式

?

在快捷方式的“目標“后鍵入:空格+/c字符。然后確定。

再運行快捷方式,服務器就會等待連接。

此時客戶端打開自己的dbgview.exe

?

點擊connect后,輸入服務器的IP地址,便連上服務器了。這樣,用戶可以在本地直接捕獲服務器上的Debug信息了。

主要功能就是這些。另外,如果要在運行時應用不輸出debug信息,可以將web.config或app.config中的

<system.web>

?????????????????? <compilation debug="true" targetFramework="4.0"/>

設置為false,然后在調用WinDebug的地方就不會再輸出Debug信息了

2.) 在程序中輸出調試信息


參考:

  • ?http://www.cnblogs.com/mushan/p/3351321.html

  • ?http://www.cnblogs.com/ziwuge/archive/2011/10/31/2230326.html
  • http://blog.csdn.net/tanaya/article/details/5774671

要注意OutputDebugString 的格式,注意ASCII和Unicode不一樣。

WINBASEAPI
VOID
WINAPI
OutputDebugStringA(
__in_opt LPCSTR lpOutputString
);
WINBASEAPI
VOID
WINAPI
OutputDebugStringW(
__in_opt LPCWSTR lpOutputString
);
#ifdef UNICODE
#define OutputDebugString OutputDebugStringW
#else
#define OutputDebugString OutputDebugStringA
#endif // !UNICODE

以下是我截取上面博客中的程序,可以直接使用。
debugPrint.h
//木杉的博客 http://www.cnblogs.com/mushan    
//2012年6月10日    
#ifndef _DEBUGPRINTF_H_    
#define _DEBUGPRINTF_H_    
#include<Windows.h>    
#include <tchar.h>    
//用于輸出信息到編譯器輸出窗口的宏定義    
//使用win API,DEBUG版本會執行,RELEASE版本則不會    
//還可以使用DebugView,WinDbg等工具查看輸出    
#ifdef _DEBUG    
#define DP0(fmt) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt));OutputDebugString(sOut);}    
#define DP1(fmt,var) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var);OutputDebugString(sOut);}    
#define DP2(fmt,var1,var2) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2);OutputDebugString(sOut);}    
#define DP3(fmt,var1,var2,var3) {TCHAR sOut[256];_stprintf_s(sOut,_T(fmt),var1,var2,var3);OutputDebugString(sOut);}    
//格式化輸出調試信息
void OutputDebugPrintf(const char * strOutputString,...)
{
char strBuffer[4096]={0};
va_list vlArgs;
va_start(vlArgs,strOutputString);
_vsnprintf(strBuffer,sizeof(strBuffer)-1,strOutputString,vlArgs);
//vsprintf(strBuffer,strOutputString,vlArgs);
va_end(vlArgs);
//ASCII
OutputDebugStringA(strBuffer);
}
#endif    
#ifndef _DEBUG    
#define DP0(fmt) ;    
#define DP1(fmt, var) ;    
#define DP2(fmt,var1,var2) ;    
#define DP3(fmt,var1,var2,var3) ;    
void OutputDebugPrintf(const char * strOutputString,...){}
#endif    
#endif
main.cpp
	//木杉的博客  http://www.cnblogs.com/mushan  
//2012年6月10日    
#include<stdio.h>   
#include"debugPrint.h"   
void main()   
{   
OutputDebugPrintf("DEBUG_INFO | %d %s",600019,"北雁\n");
for(int i=0;i<10;i++)   
{   
printf("hello!\n");   
DP0("這是調試信息!\n");   
DP1("這是調試信息%d\n",i);   
DP2("這是調試信息%d--%d\n",i,i+1);   
DP3("這是調試信息%d--%d--%d\n",i,i+1,i+2);   
}   
getc(stdin); 
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258804.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258804.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258804.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux上實現ssh免密碼登陸遠程服務器

0.說明平常使用ssh登陸遠程服務器時&#xff0c;都需要使用輸入密碼&#xff0c;希望可以實現通過密鑰登陸而免除輸入密碼&#xff0c;從而可以為以后實現批量自動部署主機做好準備。環境如下&#xff1a;IP地址操作系統服務器端10.0.0.128/24CentOS 6.5 x86客戶端10.0.0.129/2…

【強連通分量+概率】Bzoj2438 殺人游戲

Description 一位冷血的殺手潛入 Na-wiat&#xff0c;并假裝成平民。警察希望能在 N 個人里面&#xff0c;查出誰是殺手。 警察能夠對每一個人進行查證&#xff0c;假如查證的對象是平民&#xff0c;他會告訴警察&#xff0c;他認識的人&#xff0c; 誰是殺手&#xff0c; 誰是…

serialversionuid的作用_為什么阿里Java規約要求謹慎修改serialVersionUID字段

serialVersionUID簡要介紹serialVersionUID是在Java序列化、反序列化對象時起作用的一個字段。Java的序列化機制是通過判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時&#xff0c;JVM會把傳來的字節流中的serialVersionUID與本地相應實體類的serialVersionUID進…

fatal error LNK1169: 找到一個或多個多重定義的符號 的解決方案

昨天&#xff0c;嘗試一個項目&#xff0c;遇到了如下的問題。先來還原一下&#xff1a; 頭文件test.h #pragma once #include <Eigen/Core> #include <iostream>using namespace Eigen; using namespace std;class point2 { public: point2(int x1,int y1):x(x…

常用工具說明--搭建基于rietveld的CodeReview平臺(未測試)

為什么要codereview . 整個團隊的編碼風格是統一的。 . 有高手能對自己的代碼指點一二&#xff0c;從而提高編碼水平。 . 減少低級錯誤的出現 . 約束自己寫高質量的代碼&#xff0c;因為是要給人看的。 我們對codereview的需求 . 很輕松可以發布自己寫的代碼。 . 很輕松的可以與…

輸入的優化

讀入整型時&#xff0c;輸入優化可以節省不少時間 1 typedef type long long 2 // 這里以long long為例 3 type read() { 4 type x0; int f1; 5 char chgetchar(); 6 while(ch<0||ch>9) {if(ch-) f-1; chgetchar();} 7 while(ch>0&&ch<9) …

python股票分析系統_熬了一晚上,小白用Python寫了一個股票提醒系統

碼農小馬七夕節去相親了&#xff0c;見了一個不錯的姑娘&#xff0c;長的非常甜美&#xff01;聊著聊著很投緣&#xff01;通過介紹人了解到&#xff0c;對方也很滿意&#xff5e;&#xff5e;想著自己單身多年的生活就要結束啦&#xff0c;心里滿是歡喜&#xff0c;美美噠&…

有關eigen庫的一些基本使用方法

目錄 介紹安裝Demo矩陣、向量初始化C數組和矩陣轉換矩陣基礎操作點積和叉積轉置、伴隨、行列式、逆矩陣計算特征值和特征向量解線性方程最小二乘求解稀疏矩陣介紹 Eigen是一個輕量級的矩陣庫,除了稀疏矩陣不成熟&#xff08;3.1有較大改進&#xff09;以外,其他的矩陣和向量操作…

匯編程序:將字符串中所有大寫字符轉為小寫

【任務】 編寫程序&#xff0c;將數據區中定義的以0作為結束符的一個字符串中所有的大寫字符&#xff0c;全部轉換為小寫。 【參考解答】 assume cs:cseg, ds:dseg, ss:sseg sseg segment stackdw 100h dup (?) sseg ends dseg segmentdb YanTai123University, 0 d…

從零開始編寫自己的C#框架(1)——前言

記得十五年前自學編程時&#xff0c;拿著C語言厚厚的書&#xff0c;想要上機都不知道要用什么編譯器來執行書中的例子。十二年前在大學自學ASP時&#xff0c;由于身邊沒有一位同學和朋友學習這種語言&#xff0c;也只能整天混在圖收館里拼命的啃書。而再后來也差不多&#xff0…

Bash內置命令

Bash有很多內置命令&#xff0c;因為這些命令是內置的&#xff0c;因此bash不需要在磁盤上為它們定位&#xff0c;執行速度更快。 1&#xff09;列出所有內置命令列表$enable 2&#xff09;關閉內置命令test$enable -n test 3&#xff09;打開內置命令test$enable test 4&…

postman調用webservice接口_接口對前后端和測試的意義

1.什么是接口&#xff1f;接口測試主要用于外部系統與系統之間以及內部各個子系統之間的交互點&#xff0c;定義特定的交互點&#xff0c;然后通過這些交互點來&#xff0c;通過一些特殊的規則也就是協議&#xff0c;來進行數據之間的交互。2.接口都有哪些類型&#xff1f;接口…

基于代數距離的橢圓擬合

問題 給定離散點集Xi(xi,yi),i1,2,...NX_i(x_i,y_i) ,i1,2,...NXi?(xi?,yi?),i1,2,...N&#xff0c;我們希望找到誤差最小的橢圓去擬合這些離散點。 方法 由于橢圓的形式可以給定&#xff0c; 自然我們將使用最小二乘法來求解橢圓。主要依據論文《Direct least squares f…

Java與C語言比較(Java參考書中摘錄)

C語言為面向過程的編程語言&#xff0c;Java為面向對象的編程語言。 在面向過程的編程語言(如C語言)中&#xff0c;編程一般面向操作&#xff0c;編程單位是函數(在Java中函數稱為方法)。 在Java中&#xff0c;編程單位是類。最終實例化(即創建)這些類而得到對象&#xff0c;屬…

Android調試技巧之Eclipse行號和Logcat

很多初入Android的開發者可能會發現經常遇到Force Close或ANR這樣的問題&#xff0c;一般我們通過Android系統的錯誤日志打印工具Logcat可以看到出錯的內容&#xff0c;今天一起來說下如何通過 Eclipse行號和Logcat捕捉出錯點&#xff0c;我們遇到錯誤可以首先在Eclipse的DDMS中…

第六章 產權市場

《市場經濟概論》&#xff08;6&#xff09;產權市場一 第六章 產權市場 產權是指人們對于某種資產所擁有的所有權、占有權、支配權、使用權。產權市場是指人們對于某種資產所擁有的所有權、占有權、支配權、使用權進行有償轉讓的場所領域及其有關各方面相互關系的總和。在過去…

js打開本地文件夾_vue + ArcGIS 地圖應用系列一:arcgis api本地部署(開發環境)

1. 下載 ArcGIS API for JavaScript 官網地址&#xff1a; https://developers.arcgis.com/javascript/3/ 下載地址&#xff1a;http://links.esri.com/javascript-api/latest-download需要穩定的網絡環境注冊賬號后才可以下載下載完成后解壓文件&#xff0c;文件比較大可能需要…

基于幾何距離的橢圓擬合

問題 給定離散點集Xi(xi,yi)X_i(x_i,y_i)Xi?(xi?,yi?)&#xff0c;我們希望找到最好的橢圓去擬合這些離散點。 方法 通常我們使用最小二乘法求解如下的最優化問題&#xff1a; Min∑i1Nf(xi,E)2Min \sum_{i1}^N f(x_i,E)^2 Mini1∑N?f(xi?,E)2 這里f(xi,E)f(x_i,E)f(xi…

Generate Parentheses

題目 Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. For example, given n 3, a solution set is: "((()))", "(()())", "(())()", "()(())", "()()()" 方法…

ReportViewer 2010 打印預覽,用鼠標快速切換顯示比例時報錯:存儲空間不足,不能處理此命令...

CreateCompatibleDIB 存儲空間不足 無法處理此命令 安裝 ReportViewer 2010 sp1 即可。轉載于:https://www.cnblogs.com/runliuv/p/3640856.html