【发布时间】:2014-11-12 16:45:07
【问题描述】:
如果函数参数大于某个值,我想在函数参数上设置断点。下面的虚拟代码:
int main(void)
{
uint64_t num = 123456;
uint64_t x = 847534;
uint64_t other = (num*x) - (x/num);
.... other stuff here (multithreaded stuff)
calc(other);
}
void calc(uint64_t size)
{
...do some stuff with size
}
我尝试通过以下方式设置断点:
(gdb) b calc if size == 852479
但它不知道大小是多少,因为它是我猜测的参数。如果参数等于某个数字,我将如何中断。中断对该函数的所有调用不是一个选项,因为它在多线程环境中被调用了十亿次。
【问题讨论】:
-
你试过在函数代码的第一行设置断点吗?
-
@RickyMutschlechner 我看过那个 1 并且它不是重复的,因为在那个代码 x (有问题的变量)的情况下,gdb 假设它可以中断,因为它是在函数外部声明的变量。在我的例子中,这个变量是一个函数的参数。我能够成功打破在函数外部声明的变量,但无法通过条件中断来打破参数
-
@Nick.D,我的意思是有条件的休息
-
那个条件断点命令对我来说很好用(CentOS 7 上的 gcc 4.8.2、gdb 7.6.1-51.el7)。我在启动 gdb 后立即键入它,而不运行目标。您在哪些 gcc/gdb 版本和操作系统上看到此问题?