【问题标题】:Is it possible to set a "global" conditional breakpoint that is evaluated anywhere the condition is valid?是否可以设置在条件有效的任何地方评估的“全局”条件断点?
【发布时间】:2020-09-17 04:17:48
【问题描述】:

我正在使用不使用异常的 C++ 代码库,约定是每个函数在失败时返回 false,因此代码的很大一部分如下所示:

bool compute_something(int& result) {
    bool ok = step1();
    ok = ok && step2();
    ok = ok && step3();
    ...
    ok = ok && stepN(result);
    return ok;
}

在调试错误时,我想在程序中名为“ok”的任何变量变为false时添加一个断点,以便找到错误发生的确切时刻。

我找到了this question,有点类似,但不能解决这个问题(而且是gdb特有的)。

这可以在visual studio中实现吗?或任何其他环境,答案可能对其他人有所帮助。

【问题讨论】:

  • 很难做到。名字只是对人类的一种方便。计算机不使用它们;一切都只是一个地址或一个地址的偏移量。来自调试版本的额外信息可以帮助追踪所有oks,但一般情况下不起作用。如何管理对ok 的指针和引用?递归会发生什么?这可能是很多oks。
  • 我的想法与通常的条件断点一样。在任何范围内,在任何行,如果ok == false(其中 ok 是局部变量),您都可以添加条件断点。尽管我明白您的意思,但通过引用函数传递本地 ok,您将能够间接修改它。事实上,我真正关心的场景正是通常的断点之一,即只有一个 local 变量被修改。

标签: c++ visual-studio debugging conditional-breakpoint


【解决方案1】:

不幸的是,我很确定你不能。随机名称的变量上可能没有断点。您可以将内存访问断点放置在特定的内存地址上,或者您可以使用当前会话范围内的变量名称(只是将断点放置在所述变量的地址上)。

原因是内存访问断点是在硬件中完成的,而硬件根本没有任何名称的概念。

【讨论】:

    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    相关资源
    最近更新 更多