До тех пор, пока я не начал использовать Arch linux пару недель назад, gdb мог бы оценивать многострочные выражения, если бы они были атомарными. Так что для условия, подобного этому:
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 (если я явно не выполнил команду списка), это первая строка:
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, собранный из исходного кода. Я использовал эту точную версию, собранную из того же источника, в моей системе Ubuntu, прежде чем перейти на Arch.
Редактировать: я вижу то же поведение при использовании gdb --tui
gcc - версия моей архивной системы:
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.
gcc - версия в моей системе Ubuntu:
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.