亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mfc

?? 很好的MFC書籍
??
?? 第 1 頁 / 共 2 頁
字號:
  <P align=justify>使用ASSERT斷言判定程序是否可以繼續執行。</P>
  <P align=justify>TRACE</P>
  <P 
  align=justify>使用TRACE宏顯示或者打印調試信息。TRACE是通過函數AfxTrace實現的。由于AfxTrace函數使用了cdecl調用約定,故可以接受個數不定的參數,如同printf函數一樣。它的定義和實現如下:</P>
  <P align=justify>void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...)</P>
  <P align=justify>{</P>
  <P align=justify>#ifdef _DEBUG // all AfxTrace output is controlled by 
  afxTraceEnabled</P>
  <P align=justify>if (!afxTraceEnabled)</P>
  <P align=justify>return;</P>
  <P align=justify>#endif</P>
  <P align=justify></P>
  <P align=justify>//處理個數不定的參數</P>
  <P align=justify>va_list args;</P>
  <P align=justify>va_start(args, lpszFormat);</P>
  <P align=justify></P>
  <P align=justify>int nBuf;</P>
  <P align=justify>TCHAR szBuffer[512];</P>
  <P align=justify></P>
  <P align=justify>nBuf = _vstprintf(szBuffer, lpszFormat, args);</P>
  <P align=justify>ASSERT(nBuf &lt; _countof(szBuffer));</P>
  <P align=justify></P>
  <P align=justify>if ((afxTraceFlags &amp; traceMultiApp) &amp;&amp; 
  (AfxGetApp() != NULL))</P>
  <P align=justify>afxDump &lt;&lt; AfxGetApp()-&gt;m_pszExeName &lt;&lt; ": 
  ";</P>
  <P align=justify>afxDump &lt;&lt; szBuffer;</P>
  <P align=justify></P>
  <P align=justify>va_end(args);</P>
  <P align=justify>}</P>
  <P align=justify>#endif //_DEBUG</P>
  <P align=justify></P>
  <P 
  align=justify>在程序源碼中,可以控制是否顯示跟蹤信息,顯示什么跟蹤信息。如果全局變量afxTraceEnabled為TRUE,則TRACE宏可以輸出;否則,沒有TRACE信息被輸出。如果通過afxTraceFlags指定了跟蹤什么消息,則輸出有關跟蹤信息,例如為了指定“Multilple 
  Application Debug”,令AfxTraceFlags|=traceMultiApp。可以跟蹤的信息有:</P>
  <P align=justify>enum AfxTraceFlags</P>
  <P align=justify>{</P>
  <P align=justify>traceMultiApp = 1, // multi-app debugging</P>
  <P align=justify>traceAppMsg = 2, // main message pump trace (includes 
DDE)</P>
  <P align=justify>traceWinMsg = 4, // Windows message tracing</P>
  <P align=justify>traceCmdRouting = 8, // Windows command routing trace </P>
  <P align=justify>//(set 4+8 for control notifications)</P>
  <P align=justify>traceOle = 16, // special OLE callback trace</P>
  <P align=justify>traceDatabase = 32, // special database trace</P>
  <P align=justify>traceInternet = 64 // special Internet client trace</P>
  <P align=justify>};</P>
  <P 
  align=justify>這樣,應用程序可以在需要的地方指定afxTraceEnabled的值打開或者關閉TRACE開關,指定AfxTraceFlags的值過濾跟蹤信息。</P>
  <P align=justify>Visual C++提供了一個TRACE工具,也可以用來完成上述功能。</P>
  <P align=justify></P>
  <P 
  align=justify>為了顯示消息信息,MFC內部定義了一個AFX_MAP_MESSAG類型的數組allMessages,儲存了Windows消息和消息名映射對。例如:</P>
  <P align=justify>allMessages[1].nMsg = WM_CREATE,</P>
  <P align=justify>allMessages[1].lpszMsg = “WM_CREATE”</P>
  <P 
  align=justify>MFC內部還使用函數_AfxTraceMsg顯示跟蹤消息,它可以接收一個字符串和一個MSG指針,然后,把該字符串和MSG的各個域的信息組合成一個大的字符串并使用AfxTrace顯示出來。</P>
  <P align=justify>allMessages和函數_AfxTraceMsg的詳細實現可以參見AfxTrace.cpp。</P>
  <P align=justify></P>
  <LI>MFC對象內容轉儲 
  <P></P>
  <P 
  align=justify>對象內容轉儲是CObject類提供的功能,所有從它派生的類都可以通過覆蓋虛擬函數DUMP來支持該功能。在講述CObject類時曾提到過。</P>
  <P align=justify>虛擬函數Dump的定義:</P>
  <P align=justify>class ClassName : public CObject</P>
  <P align=justify>{</P>
  <P align=justify>public:</P>
  <P align=justify>#ifdef _DEBUG</P>
  <P align=justify>virtual void Dump( CDumpContext&amp; dc ) const;</P>
  <P align=justify>#endif</P>
  <P align=justify>…</P>
  <P align=justify>};</P>
  <P 
  align=justify>在使用Dump時,必須給它提供一個CDumpContext類型的參數,該參數指定的對象將負責輸出調試信息。為此,MFC提供了一個預定義的全局CDumpContext對象afxDump,它把調試信息輸送給調試器的調試窗口。從前面AfxTrace的實現可以知道,MFC使用了afxDump輸出跟蹤信息到調試窗口。</P>
  <P align=justify>CDumpContext類沒有基類,它提供了以文本形式輸出診斷信息的功能。</P>
  <P align=justify>例如:</P>
  <P align=justify>CPerson* pMyPerson = new CPerson;</P>
  <P align=justify>// set some fields of the CPerson object...</P>
  <P align=justify>//...</P>
  <P align=justify>// now dump the contents</P>
  <P align=justify>#ifdef _DEBUG</P>
  <P align=justify>pMyPerson-&gt;Dump( afxDump );</P>
  <P align=justify>#endif</P>
  <P align=justify></P>
  <LI>MFC對象有效性檢測 
  <P></P></LI></OL>
<P 
align=justify>對象有效性檢測是CObject類提供的功能,所有從它派生的類都可以通過覆蓋虛擬函數AssertValid來支持該功能。在講述CObject類時曾提到過。</P>
<P align=justify>虛擬函數AssertValid的定義:</P>
<P align=justify>class ClassName : public CObject</P>
<P align=justify>{</P>
<P align=justify>public:</P>
<P align=justify>#ifdef _DEBUG</P>
<P align=justify>virtual void AssertValid( ) const;</P>
<P align=justify>#endif</P>
<P align=justify>… </P>
<P align=justify>};</P>
<P 
align=justify>使用ASSERT_VALID宏判斷一個對象是否有效,該對象的類必須覆蓋了AssertValid函數。形式為:ASSERT_VALID(pObject)。</P>
<P align=justify>另外,MFC提供了一些函數來判斷地址是否有效,如:</P>
<P align=justify>AfxIsMemoryBlock,AfxIsString,AfxIsValidAddress。</P>
<OL>
  <OL>
    <OL>
      <P align=justify>
      <LI><A name=_Toc445889128></A><A name=_Toc445782531></A><A 
      name=_Toc452640990></A><A name=_Toc457299099></A><B>內存診斷</B> 
      <P></P></LI></OL></OL></OL>
<P align=justify>MFC使用DEBUG_NEW來跟蹤內存分配時的執行的源碼文件和行數。</P>
<P align=justify>把#define new DEBUG_NEW插入到每一個源文件中,這樣,調試版本就使用_malloc_dbg來分配內存。MFC 
Appwizard在創建框架文件時已經作了這樣的處理。</P>
<OL>
  <P align=justify>
  <LI>AfxDoForAllObjects 
  <P></P>
  <P align=justify>MFC提供了函數AfxDoForAllObjects來追蹤動態分配的內存對象,函數原型如下:</P>
  <P align=justify>void AfxDoForAllObjects( void (*pfn)(CObject* pObject, </P>
  <P align=justify>void* pContext), void* pContext ); </P>
  <P align=justify>其中:</P>
  <P align=justify>參數1是一個函數指針,AfxDoForAllObjects對每個對象調用該指針表示的函數。</P>
  <P align=justify>參數2將傳遞給參數1指定的函數。</P>
  <P 
  align=justify>AfxDoForAllObjects可以檢測到所有使用new分配的CObject對象或者CObject類派生的對象,但全局對象、嵌入對象和棧中分配的對象除外。</P>
  <P align=justify></P>
  <LI>內存漏洞檢測 
  <P></P></LI></OL>
<P align=justify>僅僅用于new的DEBUG版本分配的內存。</P>
<P align=justify>完成內存漏洞檢測,需要如下系列步驟:</P>
<UL>
  <P align=justify>
  <LI>調用AfxEnableMemoryTracking(TRUE/FALSE)打開/關閉內存診斷。在調試版本下,缺省是打開的;關閉內存診斷可以加快程序執行速度,減少診斷輸出。 

  <P></P>
  <P align=justify></P>
  <LI>使用MFC全局變量afxMemDF更精確地指定診斷輸出的特征,缺省值是allocMemDF,可以取如下值或者這些值相或: 
  <P></P></LI></UL>
<P align=justify>afxMemDF,delayFreeMemDF,checkAlwaysMemDF</P>
<P 
align=justify>其中:allocMemDF表示可以進行內存診斷輸出;delayFreeMemDF表示是否是在應用程序結束時才調用free或者delete,這樣導致程序最大可能的分配內存;checkAlwaysMemDF表示每一次分配或者釋放內存之后都調用函數AfxCheckMemory進行內存檢測(AfxCheckMemory檢查堆中所有通過new分配的內存(不含malloc))。</P>
<P align=justify>這一步是可選步驟,非必須。</P>
<UL>
  <P align=justify>
  <LI>創建一個CMemState類型的變量oldMemState,調用CMemState的成員函數CheckPoint獲得初次內存快照。 
  <P></P>
  <P align=justify></P>
  <LI>執行了系列內存分配或者釋放之后,創建另一個CMemState類型變量newMemState,調用CMemState的成員函數CheckPoint獲得新的內存快照。 

  <P></P>
  <P align=justify></P>
  <LI>創建第三個CMemState類型變量difMemState,調用CMemState的成員函數Difference比較oldMemState和newMemState,結果保存在變量difMemState中。如果沒有不同,則返回FALSE,否則返回TRUE。 

  <P></P>
  <P align=justify></P>
  <LI>如果不同,則調用成員函數DumpStatistics輸出比較結果。 
  <P></P></LI></UL>
<P align=justify>例如:</P>
<P align=justify>// Declare the variables needed</P>
<P align=justify>#ifdef _DEBUG</P>
<DIR>
<P align=justify>CMemoryState oldMemState, newMemState, diffMemState;</P>
<P align=justify>oldMemState.Checkpoint();</P></DIR>
<P align=justify>#endif</P>
<P align=justify></P>
<P align=justify>// do your memory allocations and deallocations...</P>
<P align=justify>CString s = "This is a frame variable";</P>
<P align=justify>// the next object is a heap object</P>
<P align=justify>CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );</P>
<P align=justify></P>
<P align=justify>#ifdef _DEBUG</P>
<DIR>
<P align=justify>newMemState.Checkpoint();</P>
<P align=justify>if( diffMemState.Difference( oldMemState, newMemState ) )</P>
<P align=justify>{</P>
<DIR>
<P align=justify>TRACE( "Memory leaked!\n" );</P>
<P align=justify>diffMemState.DumpStatistics();</P>
<P align=justify>//or diffMemState.DumpAllObjectsSince();</P></DIR>
<P align=justify>}</P></DIR>
<P align=justify>#endif</P>
<P align=justify>MFC在應用程序(調試版)結束時,自動進行內存漏洞檢測,如果存在漏洞,則輸出漏洞的有關信息。</P>
<HR>

<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center border=0>
  <TBODY>
  <TR>
    <TD align=middle><A href="http://www.vczx.com/tutorial/mfc/mfc9.php" 
      target=_self>上一章</A> <A href="http://www.vczx.com/tutorial/mfc/mfc.php" 
      target=_self>回目錄</A> <A href="http://www.vczx.com/tutorial/mfc/mfc11.php" 
      target=_self>下一章</A></TD></TR></TBODY></TABLE>
<P>&nbsp;</P>
<P align=justify></P></BODY></HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本va欧美va瓶| 国产精品无遮挡| 欧美在线三级电影| 在线观看免费亚洲| 欧美写真视频网站| 欧美人妇做爰xxxⅹ性高电影 | 日韩欧美资源站| 欧美日韩国产一区二区三区地区| 在线视频一区二区免费| 欧美婷婷六月丁香综合色| 欧美日韩一区二区电影| 在线91免费看| 欧美精品一区二区三区高清aⅴ| 精品少妇一区二区三区视频免付费| 欧美成va人片在线观看| 精品国产伦一区二区三区免费| 欧美大度的电影原声| 国产无遮挡一区二区三区毛片日本| 国产情人综合久久777777| 一区在线播放视频| 亚洲福利视频三区| 国产一区二区三区免费在线观看| 国产麻豆视频一区二区| gogo大胆日本视频一区| 欧美日韩一区视频| 久久婷婷国产综合精品青草 | 成人高清免费观看| 在线精品国精品国产尤物884a| 在线免费观看一区| 久久综合色鬼综合色| 亚洲精品中文在线影院| 美女爽到高潮91| 成人激情电影免费在线观看| 欧亚洲嫩模精品一区三区| 欧美一级片在线看| 亚洲欧洲日韩女同| 美国毛片一区二区| 91久久人澡人人添人人爽欧美| 日韩午夜电影在线观看| 日本一区二区成人在线| 午夜久久电影网| 成人激情av网| www精品美女久久久tv| 亚洲一区自拍偷拍| 成人av在线资源网| 日韩视频免费观看高清完整版在线观看 | 天天影视色香欲综合网老头| 精品午夜一区二区三区在线观看| 99re这里都是精品| 国产日韩高清在线| 蜜臀精品久久久久久蜜臀| 91九色02白丝porn| 国产精品午夜久久| 国产精品一区二区久久不卡| 欧美午夜在线一二页| 1024亚洲合集| 国产69精品久久久久毛片| 日韩亚洲欧美在线| 日韩精品电影一区亚洲| 在线视频欧美精品| 亚洲麻豆国产自偷在线| 成人性生交大片免费看在线播放 | 中文字幕av免费专区久久| 美国一区二区三区在线播放| 欧美系列一区二区| 亚洲精选视频免费看| 成人精品视频一区二区三区尤物| 日韩视频在线你懂得| 日韩精品每日更新| 欧美色综合网站| 亚洲精品国产视频| 91免费国产在线观看| 亚洲天堂久久久久久久| aaa欧美大片| 国产精品美女久久久久高潮| 国产激情精品久久久第一区二区 | 一本色道综合亚洲| 一区二区三区中文字幕电影| 不卡影院免费观看| 自拍偷拍国产精品| 在线影视一区二区三区| 亚洲狠狠丁香婷婷综合久久久| eeuss鲁片一区二区三区在线看| 国产精品无遮挡| av午夜一区麻豆| 亚洲午夜精品一区二区三区他趣| 欧美午夜精品久久久久久超碰| 亚洲精品乱码久久久久久久久 | 亚洲美女精品一区| 91成人免费在线视频| 亚洲精品伦理在线| 91精品国产免费| 狠狠色综合色综合网络| 国产欧美一区二区精品久导航 | 国产精品18久久久久久久久 | 亚洲成a人v欧美综合天堂| 欧美日本一区二区三区四区 | 中日韩av电影| 色哦色哦哦色天天综合| 视频精品一区二区| 26uuu国产在线精品一区二区| 波多野结衣精品在线| 亚洲综合免费观看高清完整版| 色丁香久综合在线久综合在线观看| 亚洲.国产.中文慕字在线| 欧美一级精品大片| 不卡大黄网站免费看| 午夜久久电影网| 中文字幕欧美日本乱码一线二线| 日本久久电影网| 国产二区国产一区在线观看| 亚洲自拍与偷拍| 久久看人人爽人人| 在线观看一区日韩| 国产精品自产自拍| 亚洲成人资源在线| 国产精品婷婷午夜在线观看| 欧美日韩亚洲综合在线 | 日韩精品亚洲一区| 国产夜色精品一区二区av| 日本高清不卡一区| 国产高清亚洲一区| 日韩福利视频导航| 有码一区二区三区| 国产区在线观看成人精品| 555www色欧美视频| 色av一区二区| a亚洲天堂av| 九九在线精品视频| 调教+趴+乳夹+国产+精品| 欧美国产成人精品| 精品久久久久av影院| 精品视频1区2区3区| 99精品国产99久久久久久白柏| 蜜桃视频在线观看一区| 亚洲国产中文字幕在线视频综合| 中文字幕免费一区| 久久精品人人做人人综合| 91精品国产综合久久婷婷香蕉| 色综合天天综合在线视频| 国产精品一级二级三级| 麻豆国产欧美一区二区三区| 午夜欧美大尺度福利影院在线看| 日韩一区中文字幕| 国产精品欧美久久久久无广告| 久久这里只精品最新地址| 日韩视频在线一区二区| 亚洲欧洲国产专区| 国产色综合久久| 久久久久久久综合色一本| 精品国产一二三| 精品88久久久久88久久久| 欧美一区二区三区视频| 制服丝袜av成人在线看| 91精品国产色综合久久| 欧美一区二区三级| 日韩一级免费观看| 精品伦理精品一区| 久久中文字幕电影| 国产女人aaa级久久久级| 国产校园另类小说区| 日本一区二区视频在线观看| 国产精品免费aⅴ片在线观看| 国产精品色在线| 亚洲综合色视频| 美女网站一区二区| 国产精品一区2区| 成人av集中营| 欧美在线一区二区| 欧美高清视频www夜色资源网| 欧美日韩国产综合草草| 日韩精品自拍偷拍| 欧美激情一区二区三区全黄| 欧美高清在线视频| 亚洲成人动漫一区| 九九九精品视频| 91在线精品一区二区三区| 欧美性xxxxxx少妇| 精品国产三级电影在线观看| xfplay精品久久| 夜夜嗨av一区二区三区网页| 日韩高清电影一区| 懂色av一区二区三区免费看| 91在线高清观看| 日韩无一区二区| 亚洲色图在线播放| 青草av.久久免费一区| 成人综合婷婷国产精品久久免费| 色呦呦网站一区| 亚洲四区在线观看| 男男gaygay亚洲| 99re66热这里只有精品3直播| 制服丝袜亚洲网站| 中文字幕一区免费在线观看| 天天色天天操综合| 成人av在线观| 欧美成人一区二区三区在线观看 | 久久免费午夜影院| 亚洲午夜影视影院在线观看| 国产成都精品91一区二区三|