【问题标题】:Set Visual Studio (conditional) breakpoint on local variable value在局部变量值上设置 Visual Studio(条件)断点
【发布时间】:2009-10-29 00:43:22
【问题描述】:

我正在尝试调试一种方法,其中包括将项目添加到该方法的本地列表中。

但是,列表大小每隔一段时间就会被设置为零“中游”。我想将调试器设置为在列表大小变为零时中断,但我不知道该怎么做,并且希望有任何关于如何做到这一点的指针。

谢谢。

【问题讨论】:

  • 你需要找出成员(很容易被下划线和神秘的名字迷失......)并将其设置为条件。
  • 很抱歉。我在 Visual Studio .NET 2003 中编写 C++
  • 您可以(几乎)始终将变量设为全局变量并在那里设置数据断点
  • 建议:请编辑原问题!我还建议将标签从“visual”和“studio”更改为一个标签。
  • 我对此的第一反应是这是一个线程问题 - 你确定对你的集合的引用没有传递到其他地方吗?

标签: c++ visual-studio debugging stl


【解决方案1】:

【讨论】:

  • 谢谢...不幸的是,它在 VS.NET 2003 中不可用:(
  • 如果你有能力改变你的程序,那么你最好还是按照 o.k.w 的建议去做。
  • @Kragen:在我的答案中添加了 C++ 代码(我希望没有错)。虽然我不认为我是最好的解决方案。
【解决方案2】:

在 C# 中

if(theList.Count == 0){
  //do something meaningless here .e.g.
  int i = 1; //  << set your breakpoint here
}

在 VB.NET 中

If theList.Count = 0 Then
  'do something meaningless here .e.g.
  Dim i = 1; '  << set your breakpoint here
End If

为了完整起见,这里是 C++ 版本:

if(theList->Count == 0){
  //do something meaningless here .e.g.
  int i = 1; //  << set your breakpoint here
}

【讨论】:

  • 问题中有“stl”标签:STL is a C++ thing
  • @Rom:你说得对,我错过了,虽然 Faruz 的条件断点似乎是一个更好的选择。
  • 我已经在我访问列表的所有地方检查了列表的大小。问题是列表随机被清除。我开始怀疑堆栈损坏。 minimal reproducible example 列表大小:0, 1, 2, 3, 4, 5, 6, 7, (0) , 1, 2, 3, (0) ...
  • @Olumide:我建议您在调试时“观看”列表。
  • 观看效果很好。问题是该方法循环了几千次。长时间观察一个变量太乏味了,这就是为什么我想在遇到条件时立即中断。
【解决方案3】:

我可以为 Visual Studio 2005 提供部分答案。如果你打开“断点”窗口 (Alt + F9),你会得到一个断点列表。右键单击所需的断点,然后选择“条件”。然后放入你想要的条件。

【讨论】:

  • 我也试过了,断点被标记:“断点当前不会被命中。无法找到条件中的变量......”。我怀疑 VS.NET 在局部变量上设置断点有问题。
【解决方案4】:

您已经建议了两个主要选项: 1.条件断点 2.检查错误值的代码,如果发生这种情况,则带有断点

第一个选项是最简单和最好的,但不幸的是,在大循环上它真的很慢!如果您循环 100 次数千次迭代,则唯一真正的选择是 #2。在选项 #1 中,cpu 在每次迭代时都进入调试器,然后它评估条件,如果中断条件为假,它只会继续执行程序。当它发生数千次时这很慢,如果你只循环 1000 次它实际上很慢(当然取决于硬件)

我怀疑你真的想要一个“全局”断点条件,如果满足某个条件(数组大小 == 0)应该中断程序,不幸的是,据我所知不存在。我已经创建了一个检查条件的调试函数,如果它是真的,它会做一些毫无意义的事情,我将断点设置为(即选项 2),然后我经常调用该函数,我怀疑原来的失败。当系统崩溃时,您可以使用调用堆栈来识别故障位置。

【讨论】:

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