GDB (и то же самое относится к DBX) связывается с DDD с помощью протокола MI, который является стандартизированным и однозначным эквивалентом интерфейса командной строки.
Примечание: по умолчанию в моей системе (Fedora 15), по-видимому, они взаимодействуют напрямую с помощью интерфейса командной строки, но я заметил только ту проблему, которую вы описываете с --interpret=mi
.
Например, вот соответствующий вывод для получения списка потоков:
(gdb) info threads
Id Target Id Frame
2 Thread 0x7ffff7fd2700 (LWP 9191) "philosophers" 0x00000037dcc0b4c5 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
1 Thread 0x7ffff7fd3720 (LWP 9182) "philosophers" 0x00000037dc8df461 in clone () from /lib64/libc.so.6
(gdb) -thread-info
^done,threads=[
{id="2",target-id="Thread 0x7ffff7fd2700 (LWP 9525)",name="philosophers",
frame={level="0",addr="0x0000000000400b31",
func="chopsticks_put",
args=[{name="i",value="0"}],
file="chopsticks.c",fullname="philosphers/chopsticks.c",line="70"},
state="stopped",core="2"},
{id="1",target-id="Thread 0x7ffff7fd3720 (LWP 9522)",name="philosophers",
frame={...},
state="stopped",core="1"
}],current-thread-id="3"
Так что то, что вы увидите в DDD, будет очень похоже на то, что доступно в CLI, отличается только «уровень представления».
По моему опыту, большинство команд GDB очень быстрые, по крайней мере, когда они не зависят от выполнения отладчиком (например, next
вместо sleep(5)
). Таким образом, есть две возможности для вашей проблемы:
- ошибка в сообщении: например, тег
^done
пропущен DDD или забыт GDB, поэтому DDD напрасно ждет завершения своего запроса
- DDD запрашивает у GDB много данных, таких как определение структур, расположение функций или содержимое памяти и т. Д. (Например, из-за элементов, которые вы хотите просмотреть), поэтому потребуется некоторое время для вычисления информации GDB и передачи ее в DDD.
В нижней части DDD у вас есть GDB console
. Попробуйте ввести там несколько команд GDB. Если GDB отвечает правильно (мой случай), это означает, что DDD больше не синхронизируется с GDB. (DDD стареет, 2009/02/11, и Eclise широко использует MI, поэтому я думаю, что мы знаем, кого обвинить ...!)