直到几周前我开始使用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.
答案 0 :(得分:1)
这是gcc的问题,而不是gdb。 gcc为条件中的每一行发出调试信息。我不确定这种变化是故意的还是它是一个gcc bug。