<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 15.2 檢測內存泄漏和其它錯誤 在理想狀態下,當你的應用程序退出時,所有的對象都應該被你的應用程序或者wxWidgets本身釋放,不會有殘留的內存需要操作系統自己去釋放.不用關心內存的釋放聽上去似乎非常的誘人,但是,我們還是要說,你應該自己控制所有對象的釋放,而不要把它留給操作系統,因為通常,內存泄漏都是一些其它重大問題的前兆,它可能導致你的系統在一段時間內出現嚴重的內存問題.而當你已經轉而關注程序的其它方面的時候,會過頭來研究哪里出現了泄漏是一件非常令人沮喪的事情,因此,讓你的程序盡量保持對內存泄漏的零容忍度不是一個壞事. 那么,怎樣才可能讓你的應用程序擁有這種檢測內存泄漏的能力呢?各種各樣的第三方工具提供了這種能力甚至更多其它的能力,而且, wxWidgets也提供了一個自己的簡單的內建的內存檢測器.如果你想使用它,在windows平臺上,你需要打開setup.h中的幾個開關,而在 linux平臺上,configure程序需要一些特殊的開關: 在windows平臺上,你需要: ``` #define wxUSE_DEBUG_CONTEXT 1 #define wxUSE_MEMORY_TRACING 1 #define wxUSE_GLOBAL_MEMORY_OPERATORS 1 #define wxUSE_DEBUG_NEW_ALWAYS 1 ``` 而對于configure程序,需要傳遞這樣的參數: ``` --enable-debug --enable-mem_tracing --enable-debug_cntxt ``` 另外,使用這個系統還有一個限制:到作者停筆之前,它還不支持MinGW或Cygwin編譯器,并且如果你的代碼中使用了STL或者使用CodeWarrior編譯器,你將不能使用wxUSE_DEBUG_NEW_ALWAYS選項. 如果打開了wxUSE_DEBUG_NEW_ALWAYS選項,那么所有使用new操作分配對象的地方都將被new (__TFILE__,__LINE__)代替,后者已經被重新使用調試版本的定制內存分配和釋放機制進行實現.如果想不重新定義new而顯式使用調試版本的new過程,你可以在使用new的地方用WXDEBUG_NEW代替. 最簡單的使用這個系統的方法是:什么都不做,就只運行你的程序,作該做的事情,然后退出應用程序,然后檢查是否有任何內存泄漏被報告.下面的內存泄漏報告的一個例子: ``` There were memory leaks. - Memory dump - .\memcheck.cpp(89): wxBrush at 0xBE44B8, size 12 ..\..\src\msw\brush.cpp(233): non-object data at 0xBE55A8, size 44 .\memcheck.cpp(90): wxBitmap at 0xBE5088, size 12 ..\..\src\msw\bitmap.cpp(524): non-object data at 0xBE6FB8, size 52 .\memcheck.cpp(93): non-object data at 0xBB8410, size 1000 .\memcheck.cpp(95): non-object data at 0xBE6F58, size 4 .\memcheck.cpp(98): non-object data at 0xBE6EF8, size 8 - Memory statistics - 1 objects of class wxBitmap, total size 12 5 objects of class nonobject, total size 1108 1 objects of class wxBrush, total size 12 Number of object items: 2 Number of non-object items: 5 Total allocated size: 1132 ``` 上面的例子顯示有一個wxBrush對象和一個wxBitmap對象被分配了但是沒有被釋放,還有一些其它的未知的對象沒有被釋放,因為它們沒有提供wxWidgets的運行期類型信息,因此無法確定對象的類型.在某些集成開發環境中,你可以通過雙擊報告行顯示相應的代碼中分配這個對象的位置,這通常是檢查內存泄漏問題一個很好的開始.當然,為了最好的報告效果,最好給任何繼承自wxObject都提供運行期類型信息,方法是,在類聲明的部分增加DECLARE_CLASS(class)宏,在類實現的地方增加IMPLEMENT_CLASS(class, parentClass)宏. 這個內存檢測系統還試圖檢測那些內存越界或重復釋放的錯誤.在分配內存的時候,它自動在已經分配的內存塊上設置一個"good"標記, 在釋放的時候將會檢查這個標記,如果釋放的內存塊沒有這個標記,則報告一個內存釋放錯誤.這將幫助你發現那些隱藏的,也許在多次運行以后才會導致系統異常的內存錯誤. wxDebugContext類的一些靜態函數也很有用處,你可以通過PrintClasses函數獲取當前系統中分配的對象的列表, PrintStatistics函數可以打印出當前系統中的已知類型對象和未知類型對象的個數.使用SetCheckpoint函數,你可以告訴 wxDebugContext忽略這個函數調用以前的內存分配動作,而僅關注這以后的內存分配.詳情請參考samples/memcheck例子或者 wxDebugContext的相關手冊. 除了wxWidgets內建的基本系統,你還可以使用別的商業的或者免費的內存檢測軟件,商業軟件比如:BoundsChecker, Purify或AQtime等.自由軟件比如:StackWalker,ValGrind,Electric Fence或來自Fluid Studios的MMGR等.如果你使用的是Visual C++,wxWidgets使用的是編譯器內置的內存檢測機制,它不會給出類的名字但是會給出行號.最好是打開 wxUSE_DEBUG_NEW_ALWAYS選項,因為它將重定義new過程,除非打開這個選項導致別的第三方的庫出現兼容方面的問題.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看