注意: Visual C++.NET 或 Visual C++ 2005年偵錯工具無法 std::string 和 std::wstring 變數正確顯示

文章翻譯 文章翻譯
文章編號: 326616 - 檢視此文章適用的產品。
注意事項
全部展開 | 全部摺疊

在此頁中

徵狀

偵錯工具可能不會顯示適當的下列字串值:
  • std::string 變數,如果字串的長度大於 15 個字元。
  • std::wstring 變數,如果字串的長度是少於 15 個字元。

發生的原因

std::string 或 std::wstring 變數儲存為靜態緩衝區,如果長度是少於 15 個字元。如果字串的長度大於 15 個字元,字串會儲存為記憶體的指標。

您可以修改 Autoexp.dat 檔案,來控制 std::string 變數的偵錯工具顯示。_Bx._Buf 成員用來指定 std::string 儲存為靜態緩衝區。_Bx._Ptr 成員用來指定該 std::string 儲存為記憶體的指標。若未指定 std::string autoexp.dat 檔案中的 _Bx._Ptr 成員,偵錯工具並不會顯示具有長度超過 15 個字元的 std::string 變數。若未指定 std::wstring autoexp.dat 檔案中的 _Bx._Buf 成員,偵錯工具並不會顯示有長度少於 15 個字元的 std::wstring 變數。

解決方案

顯示變數值的偵錯工具元件即為 [運算式評估工具] (EE)。EE 的一個執行個體處理原生程式碼,以及其他執行個體處理 Managed 程式碼。Autoexp.dat 檔案提供自訂的原生 EE,並 Mcee_mc.dat 檔案提供自訂的受管理的 EE。若要解決這個問題,修改 [Autoexp.dat 檔案。

若要修改 Autoexp.dat 檔案,請依照下列步驟執行:
  1. 開啟記事本或任何其他文字編輯器。
  2. 從 c:\Program Files\Microsoft Visual Studio.NET\Common7\Packages\Debugger 資料夾開啟 Autoexp.dat 檔案。
  3. Autoexp.dat] 檔案中找出下列幾行:
    • std::basic_string<char,std::char_traits<char>,std::allocator<char> >=<_Bx._Buf>
    • std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> >=<_Bx._Ptr>
    • std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >=<_Bx._Ptr>
  4. 取代您在步驟 3 有下列的行中找到的行:
    • std::basic_string<char,std::char_traits<char>,std::allocator<char> >=
      _Buf=<_Bx._Buf> _Ptr= <_Bx._Ptr>
    • std::basic_string<unsigned short,std::char_traits<unsigned short>,std::allocator<unsigned short> >=_Buf=<_Bx._Buf> _Ptr= <_Bx._Ptr>
    • std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >=<_Bx._Buf> _Ptr= <_Bx._Ptr>

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的問題。

其他相關資訊

重製行為的步驟

  1. 建立新的 Visual C++ Win32 專案:
    1. 按一下 [檔案] 功能表 新增]
    2. 在 [專案類型 下, 按一下 [Visual C++ 專案,然後按一下 [Win32 專案 中的 [範本]。

      附註在 Visual 的 Studio 2005 中 Visual C++ 專案 變更為 Visual C++]。
    3. 為專案的名稱 LongStringDemo
    4. Win32 應用程式精靈 中按一下 [應用程式設定,] 然後選取 [為 主控台應用程式 的 [應用程式類型
    5. 在 [其他選項,按一下以選取 [空專案] 核取方塊,然後按一下 [完成]
  2. 方案總管]原始程式檔,] 上按一下滑鼠右鍵,然後按一下 [加入新的 C + + 檔案
  3. 命名檔案 LongStringDemo.cpp
  4. 將下列程式碼加入至 LongStringDemo.cpp file:
    #include <string>
    using namespace std;
    void main()
    {
    	//Ansi String
    	string szAnsiString;
    	szAnsiString = "c:\\Program Files\\Microsoft Visual Studio .Net";
    
    	//Wide Char String
    	wstring wszWCharString;
    	wszWCharString = L"c:\\Program Files\\Microsoft Visual Studio .Net";
    }
    
  5. 在 [建置] 功能表上按一下 建置方案
  6. 偵錯] 功能表上按一下 [逐步執行 (F11),並啟動偵錯]。
  7. 偵錯] 功能表上指向 [視窗],指向 [監看式,然後再按一下 [watch1
  8. 將 szAnsiString 變數和 wszWCharString 變數新增到 [監看式] 視窗。您也可以藉由指向 szAnsiString 或 wszWCharString 變數監看值。
  9. 在 [監看式] 視窗確認 szAnsiString 或 wszWCharString 變數的值。

屬性

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

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com