文章編號: 151585 - 上次校閱: 2005年9月30日 - 版次: 3.0

如何使用 _crtBreakAlloc 偵錯記憶體配置

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

當追蹤記憶體遺漏使用 C 執行階段 (CRT) 偵錯,它通常是很有效配置會使遺漏的記憶體前立即設定中斷點。藉由設定 _crtBreakAlloc 在編譯時間或執行階段您可能造成使用者定義在特定時點的記憶體配置中斷點。

其他相關資訊

當以偵錯 CRT 函式等 _CrtDumpMemoryLeaks,追蹤記憶體遺漏顯示通常以大括號 ({}) 括住的配置編號。比方說下面是在配置編號 18 的記憶體遺漏:
   Detected memory leaks!
   Dumping objects ->
   {18} normal block at 0x00660BE4, 10 bytes long
   Data: <          > CD CD CD CD CD CD CD CD CD CD
   Object dump complete.
					
很有用設定中斷點右前讓您可以逐步執行呼叫堆疊,並看到什麼函式會造成此取得配置的記憶體,取得配置這個記憶體。偵錯 CRT 函式 _CrtSetBreakAlloc,可讓您指定要中斷處的配置數字。這個方法需要每次您想要設定配置中斷點,重新編譯您的程式。另一種方法是使用 [監看式] 視窗,並動態設定配置中斷點。這個方法有不需要任何來源的程式碼變更或重新編譯的優點。

如果您以靜態方式連結到 C 的執行時間,您想要變更該的變數稱為 _crtBreakAlloc。如果您以動態方式連結到 C 的執行時間,變數您想要變更在監看式] 視窗是 {,msvcr40d.dll} * __p__crtBreakAlloc () 如果您使用 Visual C++ 4.0 或 4.1。您要變更的變數,監看式視窗應該是 {,msvcrtd.dll}*__p__crtBreakAlloc() 如果您使用的 Visual C++ 4.2 或更新版本。

若要判斷與正在編譯的 CRT 版本:
  1. 從 [建置] 功能表,選擇 [設定]。
  2. 在的設定: 窗格,選取要建置的組態。選擇 [C/C + +] 索引標籤,然後選取 [程式碼產生] 類別。
使用執行階段程式庫] 對話方塊應該會出現顯示您正在使用的 CRT 版本。(如果此設定是空白的請確定您只選取一個組態上的設定: 窗格)

若要動態設定配置中斷點,執行下列步驟:
  1. 啟動偵錯工作階段。從 [建置] 功能表上,選擇 [偵錯]-> 逐步執行]。如果您使用的 「 偵錯單一執行緒 」 或 「 偵錯多重-執行緒 CRT 」,請依照下列步驟 1a。否則,請依照下列步驟 1b。

    1. 在 [監看式] 視窗中鍵入 _crtBreakAlloc。這顯示目前的配置數的程式將會停止。您的程式第一次啟動時,這個配置編號應該是-1。
    2. 型別 {,在 [監看式] 視窗中如果您使用 Visual C++ 4.0 或 4.1 msvcr40d.dll}*__p__crtBreakAlloc()。型別 {,msvcrtd.dll}*__p__crtBreakAlloc() 如果您使用的 Visual C++ 4.2 或更新版本。這顯示目前的配置數的程式將會停止。您的程式第一次啟動時,這個配置編號應該是-1。
  2. 值-1 加倍按一下,然後輸入新配置的數字會造成使用者定義的中斷點。
  3. 從偵錯] 功能表,選擇 [偵錯]-> [Go]。
如需 _crtBreakAlloc 有關的詳細資訊,請參閱 「 追蹤堆積配置要求 」 線上說明中。

這篇文章中的資訊適用於:
  • The Integrated Debugger?應用於:
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 4.1 Subscription
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
關鍵字:?
kbmt kbbug kbcrt kbdebug kbhowto kbide KB151585 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:151585? (http://support.microsoft.com/kb/151585/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。