【问题标题】:Display element in CStringArray on Debugger one bye one?在调试器上一一显示 CStringArray 中的元素?
【发布时间】: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
  • 我想要第二只狗。那个问题?

标签: c++ debugging winapi visual-studio-2013 mfc


【解决方案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 中所述。

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多