在调试器上一一显示 CStringArray 中的元素?

Posted

技术标签:

【中文标题】在调试器上一一显示 CStringArray 中的元素?【英文标题】:Display element in CStringArray on Debugger one bye one? 【发布时间】:2015-04-15 04:27:28 【问题描述】:

此代码每次在调试器中显示 Cat。第一次和第二次。但我想在调试器中第一次显示 Cat ,然后在第二次调试器中显示 Dog 。

int main()

    CStringArray arr;

    arr.Add("Cat");
    arr.Add("Dog");

    for (int i = 0; i < arr.GetSize(); i++)
    
    cout<<"arr[i]"<<endl;
    
    return 0;*
   

忘记cout我只是使用调试器。

【问题讨论】:

第一次 m_pData=0x004166f0 L"Cat" m_nSize=2 m_nMaxSize=5 ... mfc120ud.dll!CStringArray 第二次 m_pData=0x004166f0 L"Cat" m_nSize=2 m_nMaxSize=5 ... mfc120ud.dll!CStringArray 我想要第二只狗。那个问题? 【参考方案1】:

使用

for (int i = 0; i < arr.Count(); i++)
    
        cout<<arr.GatAt(i)<<endl;
    

cout&lt;&lt;"arr[i]"&lt;&lt;endl; //这将打印普通字符串,即arr[i]

【讨论】:

No You Don't understand not in console in Autos/Debugger. 第一次 m_pData=0x004166f0 L"Cat" m_nSize=2 m_nMaxSize=5 ... mfc120ud.dll!CStringArray 第二次 m_pData=0x004166f0 L"Cat" m_nSize=2 m_nMaxSize=5 ... mfc120ud.dll!CStringArray 我想要第二只狗。那个问题?【参考方案2】:

这是一个简单的代码,它打印 Cat 和 Dog。它不会打印 Cat, Cat,除非您在其他地方有错误。您在寻找TRACE 还是OutputDebugString

CStringArray arr;
arr.Add("Cat");
arr.Add("Dog");
for (int i = 0; i < arr.GetSize(); i++)

    const char *temp = arr[i];
    TRACE("%s\n", arr[i]);//add break point here to look at temp
    //or
    //OutputDebugString(arr[i]);
    //OutputDebugString("\n");

ps,我认为您想使用断点并即时查看arr[i]。您可以使用const char *temp = arr[i] 它将使第n 个元素可见。否则我不知道。

pss,调试功能 Autos 可能不会显示 temp 的值,具体取决于您放置断点的位置,因为它会自动做出决定。但是你应该可以通过将鼠标移到temp 来查看它。

【讨论】:

No You Don't understand not in console in Autos/Debugger. 第一次 m_pData=0x004166f0 L"Cat" m_nSize=2 m_nMaxSize=5 ... mfc120ud.dll!CStringArray 第二次 m_pData=0x004166f0 L"Cat" m_nSize=2 m_nMaxSize=5 ... mfc120ud.dll!CStringArray 我想要第二只狗。那个问题? 数组的数据缓冲区从 L"Cat" 开始,在那个地址。如果再添加 1000 个元素并查看 800 次,它仍然以 Cat 开头。任何数组的行为都是一样的。如果要调试,请使用调试函数并访问第二个元素。【参考方案3】:

您无法在 Autos 或 Locals 视图中执行此操作,但您可以在 Watch 视图中执行此操作。添加到观看视图arr.m_pData,3。值 2 在这里就足够了,但是让我们看看如果你放一个更大的数字会发生什么。当您在 Watch 视图中展开名称时,您将能够看到三个项目。前两个是CatDog,第三个很可能是''。

还有一种方法可以告诉 Visual Studio 如何正确显示 CStringArray 变量,但您必须进行一些更改,如 another answer 中所述。

【讨论】:

以上是关于在调试器上一一显示 CStringArray 中的元素?的主要内容,如果未能解决你的问题,请参考以下文章

使用 delete[] 调试断言失败

CStringArray

将字符串方程转换为 CStringarray - MFC

在 CStringArray 的 5 个元素中选择 3 个元素?

CObject、CStringArray 和错误 C2248

使用 CStringArray 调用本机 Dll