У меня была точно такая же проблема при запуске gdb под emacs: окно * gud * не отвечало на команды.Тем не менее, ndk-gdb хорошо работал в оболочке.Чтобы он работал в интерфейсе emacs gud, мне пришлось немного изменить скрипт ndk-gdb.
При вызове GDB (последняя строка), сделайте следующее:
$GDBCLIENT --annotate=3 -x `native_path $GDBSETUP`
Опция --annotate = 3 обязательна для интерфейса emacs gud, без него работать невозможно (поэтому * gud * не отвечает).
Но вы на полпути.Теперь это будет работать, но только если вы вызываете ndk-gdb, находясь в буфере из файла в корне проекта (например, AndroidManifest.xml).Поскольку в большинстве случаев это маловероятно, поскольку вы программист на C / C ++, а исходные тексты, над которыми вы работаете, находятся в каталоге jni или глубже, вам нужно сделать немного больше.Скрипт ndk-gdb немного глючит, и он с радостью запутает вас (и сам gdb тоже не сильно поможет).
Поищите в скрипте «PROJECT = $ OPTION_PROJECT».Вы будете в длинном предложении if ... else ... fi, отвечающем за поиск корня проекта (если он не был задан с параметром --project, хотя это НЕ БУДЕТ решить проблему, которую япоговорим о смотри ниже).После fi добавьте эту строку:
cd $PROJECT
По какой-то непонятной причине скрипт НЕ переписывается с корневым каталогом проекта.Это приводит к очень неправильному поведению при работе с файлом gdb.setup, где предполагается, что скрипт находится в корневом каталоге проекта.Добавление этой строки исправит это.
Убедитесь, что вы вызываете ndk-gdb в emacs с помощью обычной команды:
(gdb "ndk-gdb ...")
Не используйте gud-gdb (как ни странно)Это старый emacs-способ использования gdb и не имеет ничего общего с красивым пользовательским интерфейсом, который вы ищете).Замените ... вашими аргументами (конкат ...) или чем угодно.Я настоятельно рекомендую использовать параметр --project в любом случае.Если вы этого не сделаете и у вас есть буфер для файла, который находится вне проекта, скрипт не найдет корень.Хуже того, если вы находитесь в файле в другом проекте Android, он найдет корень этого проекта (возможно, даже скопировав в него gdb.setup и другие файлы перед тем, как прервать сеанс gdb).Так что дайте эту чертову опцию --project.Если вы используете набор команд emacs для рабочего стола, сделайте следующее:
(gdb (concat "ndk-gdb --project=" desktop-dirname ...))
(конечно, если ваш .emacs.desktop находится в корне проекта).
Теперь вы можетенаконец, отладка с помощью пользовательского интерфейса gud, установка точек останова на уровне источника.Обратите внимание, что я использую emacs 23.3.1 (gdb-ui.el), поэтому нет необходимости иметь 24, чтобы это работало.