避免在Visual c++ 2008中跳出块

Avoid stepping out of block in Visual C++ 2008

本文关键字:2008 c++ Visual      更新时间:2023-10-16

考虑以下代码:

std::vector<myObject*> veryLargeArray;
for (int i = 0; i < veryLargeArray.size(); ++i)
{
  param_type* currParams = veryLargeArray[i]->GetParams<param_type>();
  currParams->phi = /* some complex formula */;
}

我该如何步进代码,这样我就知道在循环的另一个迭代开始之前,什么答案被存储在phi中,这将有效地破坏currParams,并与它在调试器中观察其值的机会?

我经常遇到这种情况,我的解决方案是通过在块结束之前放置一个虚拟变量来重新编译代码,然后我将break 通过值数组,有时可能是巨大的,只是为了看到存储的值,或者可能需要额外的工作来将存储的param_type转换为正确的对象。这两种解决方案都不理想,因为第一种解决方案引入了警告(它被视为错误,在这种情况下,我必须设置每个文件的规则)以及重新编译代码,这两种情况我都希望避免,而第二种解决方案浪费时间。

您可以在循环的每次迭代中使用跟踪点输出phi的值。您甚至应该能够将此与断点条件结合使用。

设置右括号的断点。打开断点窗口(Ctrl+D, B),并在断点列表中选择您的断点。右击并选择"条件"。在条件对话框中输入"i==veryLargeArray.Size()-1"。Ok dialog and F5;-)

您可以在循环外声明一个变量,用于在迭代之间存储您的值,并在右括号上设置一个断点。

std::vector<myObject*> veryLargeArray;  
int inspector; // assuming currParams->phi is int, change type accordingly
for (int i = 0; i < veryLargeArray.size(); ++i) 
{  
    param_type* currParams = veryLargeArray[i]->GetParams<param_type>();   
    currParams->phi = /* some complex formula */; 
    inspector = currParams->phi;
}