使gdb一次性评估多行或复合if语句

时间:2009-12-02 23:13:26

标签: debugging gdb

直到几周前我开始使用Arch linux,gdb会以原子方式评估多行if语句。所以对于这样的条件:

39523   if ((RM != NULL) && 
39524       (RM->DefaultC != NULL) &&
39525       (MSched.RemapC != NULL) &&
39526       (RM->DefaultC->FType != mqftRouting) &&
39527       (RM->DefaultC != MSched.RemapC))
39528     {
...
...
39728     } /* END if ... */
39732   if (ClassFound != TRUE)
39733     {

我在gdb中唯一看到的东西(除非我明确地执行了list命令)是第一行:

39523     if ((RM != NULL) && 
(gdb)      

现在我看到以下内容:

39523     if ((RM != NULL) && 
(gdb) 
39524         (RM->DefaultC != NULL) &&
(gdb) 
39523     if ((RM != NULL) && 
(gdb) 
39525         (MSched.RemapC != NULL) &&
(gdb) 
39523     if ((RM != NULL) && 
(gdb) 
39526         (RM->DefaultC->FType != mqftRouting) &&
(gdb) 
39523     if ((RM != NULL) && 
(gdb) 
39527         (RM->DefaultC != MSched.RemapC))
(gdb) 
39523     if ((RM != NULL) && 
(gdb) 
39732     if (ClassFound != TRUE)

我可以看到这种行为是可取的,但我更愿意能够配置它。有谁知道这是否可能?我正在使用从源代码构建的gdb 6.7.1。在我切换到Arch之前,我在我的Ubuntu系统上使用了相同来源的这个确切版本。

编辑:我在使用gdb --tui

时看到了相同的行为

我的拱门系统上的gcc --version:

gcc (GCC) 4.4.2
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我的ubuntu系统上的gcc --version:

gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

1 个答案:

答案 0 :(得分:1)

这是gcc的问题,而不是gdb。 gcc为条件中的每一行发出调试信息。我不确定这种变化是故意的还是它是一个gcc bug。