一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

MFC中調(diào)試過程中查看輸出信息

 昵稱5169677 2015-01-14

MFC中調(diào)試過程中查看輸出信息(轉(zhuǎn)載)

 (2012-11-21 13:55:26)
標(biāo)簽: 

雜談

分類: c/c++技巧

筆記&&方便查閱。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 在調(diào)試MFC程序時,我們經(jīng)常需要查看特定位置變量的輸出值?;蛘咴谀程囟l件執(zhí)行時,給出一個輸出標(biāo)識。

一般來說,有3種方法:

1) 調(diào)用TRACE(LPCTSTR lpszFormat, ...)函數(shù)

    在MFC中使用TRACE函數(shù)來打印輸出結(jié)果卻是非常方便,和在控制臺程序中使用printf函數(shù)的使用方法和效果類似。不過有幾點  

    需要注意:一,TRACE函數(shù)的輸出是在Output窗口的Debug選項下; 二,只有在DEBUG版本調(diào)試時才會有輸出,如果是在

    Release版本調(diào)試或者運(yùn)行程序時,將不會看到輸出。

========================================================================================================

 

1.在MFC中加入TRACE語句

2.在TOOLS->MFC TRACER中選擇 “ENABLE TRACING”點擊OK

3.進(jìn)行調(diào)試運(yùn)行,GO(F5)(特別注意:不是執(zhí)行‘!’以前之所以不能看到TRACE內(nèi)容,是因為不是調(diào)試執(zhí)行,而是‘!’了,切記,切記)

4.然后就會在OUTPUT中的DEBUG窗口中看到TRACE內(nèi)容了,調(diào)試執(zhí)行會自動從BUILD窗口跳到DEBUG窗口,在那里就看到TRACE的內(nèi)容了,^_^

以下是找的TRACE的詳細(xì)介紹:

 ================================================================================================

       TRACE宏對于VC下程序調(diào)試來說是很有用的東西,有著類似printf的功能;該宏僅僅在程序的DEBUG版本中出現(xiàn),當(dāng)RELEASE的時候該宏就完全消息了,從而幫助你調(diào)式也在RELEASE的時候減少代碼量。

使用非常簡單,格式如下:

TRACE("DDDDDDDDDDD");

TRACE("wewe%d",333);

同樣還存在TRACE0,TRACE1,TRACE2。。。分別對應(yīng)0,1,2。。個參數(shù)

TRACE信息輸出到VC IDE環(huán)境的輸出窗口(該窗口是你編譯項目出錯提示的哪個窗口),但僅限于你在VC中運(yùn)行你的DEBUG版本的程序。

TRACE信息還可以使用DEBUGVIEW來捕獲到。這種情況下,你不能在VC的IDE環(huán)境中運(yùn)行你的程序,而將BUILD好的DEBUG版本的程序單獨運(yùn)行,這個時候可以在DEBUGVIEW的窗口看到DEBUGVIE格式的輸出了。

VC中TRACE的用法有以下四種:

1:

TRACE   ,就是不帶動態(tài)參數(shù)輸出字符串,   類似C的printf("輸出字符串"); 
    
2:

TRACE   中的字符串可以帶一個參數(shù)輸出   , 類似C的printf("...%d",變量);

3:

TRACE   可以帶兩個參數(shù)輸出,類似C的printf("...%d...%f",變量1,變量2);

4:

TRACE 可以帶三個參數(shù)輸出,類似C的printf("...%d,%d,%d",變量1,變量2,變量3);

TRACE 宏有點象我們以前在C語言中用的Printf函數(shù),使程序在運(yùn)行過程中輸出一些調(diào)試信息,使我們能了解程序的一些狀態(tài)。但有一點不同的是:


TRACE 宏只有在調(diào)試狀態(tài)下才有所輸出,而以前用的Printf 函數(shù)在任何情況下都有輸出。和Printf 函數(shù)一樣,TRACE函數(shù)可以接受多個參數(shù)如:

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );
TRACE( "The value of x is %d\n", x );
TRACE( "x = %d and y = %d\n", x, y );
TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

要注意的是TRACE宏只對Debug 版本的工程產(chǎn)生作用,在Release 版本的工程中,TRACE宏將被忽略。



來自:http://blog.csdn.net/jiang1013nan/article/details/4166017

========================================================================================================

2)使用AfxMessageBox( )函數(shù)來輸出信息

     這個函數(shù)在調(diào)試時也比較常用,使用方法簡單,此處就不做介紹。


==================================================================================================================

 

以下簡述MessageBox與AfxMessageBox之間的區(qū)別。

 

1、AfxMessageBox()函數(shù)在任何類里邊都可以使用,而MessageBox()函數(shù)只能在CWnd類的繼承類中使用。

2、AfxMessageBox()函數(shù)的參數(shù)沒有MessageBox()函數(shù)的參數(shù)豐富,所以后者較前者靈活。

3、AfxMessageBox不能控制消息框標(biāo)題,常用于調(diào)試程序時的內(nèi)部數(shù)據(jù)輸出或警告;MessageBox比較正式,常用在要提交的應(yīng)用程序版本中,可以控制標(biāo)題內(nèi)容而不必采用含義不明的可執(zhí)行文件名為標(biāo)題。

 

int iRes = MessageBox("你看見消息框了嗎?","測試",MB_YESNO|MB_ICONWARNING);

if( iRes == IDYES )

MessageBox("看見了!");


 

AfxMessageBox的用法

 

int AfxMessageBox(

   LPCTSTR lpszText,

   UINT nType MB_OK,  //缺省為0

   UINT nIDHelp 0

);

 


字符串的類型是   LPCTSTR   。

解決辦法1: 將第4行改為:if(AfxMessageBox(_T("是否真的要退出當(dāng)前程序?"),MB_YESNO)==IDYES)

 

 

 

解決辦法2:選擇“項目”菜單->項目屬性->配置屬性->常規(guī)->字符集,改為“未設(shè)置”即可。

我覺得我們還是盡量使用方法1來解決這個問題!


也就說字符串前面加上_T  就可以將你的字符串變?yōu)殚L字節(jié)類型了。。。。


LPCTSTR類型:

  L表示long指針 這是為了兼容Windows 3.1等16位操作系統(tǒng)遺留下來的,在win32中以及其他的32位操作系統(tǒng)中, long指針和near指針及far修飾符都是為了兼容的作用。沒有實際意義。
  P表示這是一個指針
  C表示是一個常量
  T表示在Win32環(huán)境中, 有一個_T宏
  STR表示這個變量是一個字符串

 

這個宏用來表示你的字符是否使用UNICODE, 如果你的程序定義了UNICODE或者其他相關(guān)的宏,那么這個字符或者字符串將被作為UNICODE字符串,否則就是標(biāo)準(zhǔn)的ANSI字符串。

  所以LPCTSTR就表示一個指向常固定地址的可以根據(jù)一些宏定義改變語義的字符串。

 


LPCTSTR == const TCHAR *

CString 和 LPCTSTR 可以說通用。 原因在于CString定義的自動類型轉(zhuǎn)換,沒什么奇特的,最簡單的C++操作符重載而已。

LPSTR lpstr = (LPSTR)(LPCTSTR)string;  


char buf[20];

AfxMessageBox(CString(buf),0,0);

========================================================================================================

3)將標(biāo)準(zhǔn)輸出定向到自己創(chuàng)建的控制臺

      #include "io.h"
      #include "fcntl.h"

        void InitConsole()
      {
            int nRet= 0;
           FILE* fp;
           AllocConsole();
           nRet= _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
           fp = _fdopen(nRet, "w");
          *stdout = *fp;
          setvbuf(stdout, NULL, _IONBF, 0);
    }

  將此函數(shù)在MFC程序初始化的地方調(diào)用,即可使用控制臺查看printf函數(shù)的打印信息

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本高清中文精品在线不卡| 爱在午夜降临前在线观看| 国产一区二区三区成人精品| 激情偷拍一区二区三区视频| 国产欧美一区二区另类精品| 粉嫩一区二区三区粉嫩视频| 中文字幕日韩欧美亚洲午夜 | 亚洲国产另类久久精品| 毛片在线观看免费日韩| 中文字幕久热精品视频在线| 日本黄色录像韩国黄色录像| 国产午夜免费在线视频| 国内精品偷拍视频久久| 日本 一区二区 在线| 国产精品福利精品福利| 精品人妻久久一品二品三品| 精品al亚洲麻豆一区| 欧美日韩国产二三四区| 日本不卡片一区二区三区| 美女激情免费在线观看| 深夜视频成人在线观看| 中国黄色色片色哟哟哟哟哟哟| 亚洲成人精品免费在线观看| 久久精品中文字幕人妻中文| 国产熟女一区二区三区四区| 男女午夜视频在线观看免费| 欧美激情床戏一区二区三| 老司机精品视频在线免费看 | 大香蕉再在线大香蕉再在线| 国产午夜精品亚洲精品国产| 日木乱偷人妻中文字幕在线| 成年男女午夜久久久精品| 中文字幕日韩欧美理伦片| 区一区二区三中文字幕| 亚洲一区二区三区中文久久| 精品人妻一区二区三区免费| 久久精品国产在热久久| 国产精品日韩精品一区| 99久久精品久久免费| 沐浴偷拍一区二区视频| 国产av一区二区三区四区五区|