【问题标题】:Integration of android ndk's ndk-gdb with emacs?android ndk的ndk-gdb与emacs的集成?
【发布时间】:2011-06-25 14:22:04
【问题描述】:

谁能告诉我如何使用 gdb-mode 在 emacs 中运行 ndk-gdb?我目前在 shell 缓冲区中运行它。我想要的是一种在我中断或跨步时自动将源文件缓冲区与 gdb 中的当前 pc 同步的方法。更多的东西,比如从源设置中断、显示 gdb 本地的缓冲区等,以及 gdb 命令的快捷键都是肉汁。

背景:我在 2010 年 12 月 15 日的 GNU Emacs 23.1.90.1 (i386-apple-darwin10.5.0, NS apple-appkit-1038.35) 上使用 android-mode 在 OSX 10.6.6 上开发,使用 android- ndk-r5b 和用于 android 目标的混合 java/c/c++ 代码。

emacs 中的 Android 模式和 shell(运行 ndk-gdb)允许我查看我需要的几乎所有内容,但如果我可以获得源缓冲区以与调试器同步,或者获得等效的设置,我的设置会更方便EmacsWiki here 中描述的内容。

仅供参考,我目前正在使用 eclipse 进行 java 端调试和开发,但发现它不稳定且难以设置为原生工作,尽管有 sequoyah 可用,此外,eclipse 不是 emacs。

[附加]

使用 ndk-gdb 作为 gdb 命令运行 M-x gdb(见下文)会生成一个名为 gud 的缓冲区,其模式行显示为“(Debugger:run [initializing...])”。缓冲区不接受 gdb 命令,也不接受 emacs gdb 命令 - (M-s、M-n 等导致

输出:

当前目录是 /Users/jpschelter/ Android NDK安装路径:/Developer/android-ndk-r5b 使用特定的 adb 命令:/Developer/android-sdk-mac_x86/platform-tools/adb ... …… ... (未找到调试符号) 警告:无法找到动态链接器断点函数。 GDB 将无法调试共享库初始化程序 并跟踪显式加载的动态代码。 /Developer/Projects/ECS/DIGG/Projects/droid/obj/local/armeabi/libc.so 中的 nanosleep () 中的 0xafd0e21c (gdb) 未定义的命令:“1-inferior-tty-set”。试试“帮助”。 (gdb) 未定义的命令:“2-gdb-set”。试试“帮助”。 (gdb) 未定义的命令:“3-gdb-set”。试试“帮助”。 (gdb) 未定义的命令:“4-file-list-exec-source-files”。试试“帮助”。 (gdb) 未定义的命令:“5-file-list-exec-source-file”。试试“帮助”。 (gdb) 未定义的命令:“6-gdb-show”。试试“帮助”。 (gdb) 未定义的命令:“7-stack-info-frame”。试试“帮助”。 (gdb) 未定义的命令:“8 线程信息”。试试“帮助”。 (gdb) 未定义的命令:“9-break-list”。试试“帮助”。

还创建了名为 *threads of**input/output of**breakpoints of* 的缓冲区,但它们是空的。

浏览我的 emacs 的 gdb-mi.el 源,并与 gdb-debug-log 输出进行比较,看起来 gdb-mi 正在尝试将这些参数发送到 gdb 可执行文件,但 gdb-server 没有按预期响应命令?

请注意,使用 ndk-gdb 的命令行运行 Mx gud-gdb 似乎相当于在 shell 中运行 ndk-gdb,因此问题似乎在 emacs 中的 gdb-mode 配置中。

【问题讨论】:

  • 所以我在这里的解释是 ndk-gdb 可以正确运行,但是 emacs 的 gdb-mode 正在解释命令并且无法与 gdb-server,这是调试连接的主机端。

标签: android emacs gdb android-ndk


【解决方案1】:

在 emacs 下运行 gdb 时,我遇到了完全相同的问题:*gud* 窗口没有响应命令。但是,ndk-gdb 在 shell 中运行良好。为了让它在 emacs gud UI 下工作,我不得不稍微修改一下 ndk-gdb 脚本。

在调用 GDB(最后一行)时,执行以下操作:

$GDBCLIENT --annotate=3 -x `native_path $GDBSETUP`

--annotate=3 选项对于 emacs gud 接口是强制性的,没有它就无法工作(这就是 *gud* 没有响应的原因)。

但你已经成功了。现在它将起作用,但前提是您在项目根目录下的文件(如 AndroidManifest.xml)的缓冲区中调用 ndk-gdb。由于大多数情况下这不太可能,因为您是 C/C++ 程序员,并且您正在处理的源代码位于 jni 目录或更深的目录下,因此您需要做更多的事情。 ndk-gdb 脚本有点错误,它会很高兴地让你在这个问题上感到困惑(而且 gdb 本身也无济于事)。

在脚本中搜索“PROJECT=$OPTION_PROJECT”。您将处于一个很长的 if...else...fi 子句中,该子句负责查找项目的根(如果没有使用 --project 选项给出它,尽管这样做不会解决问题我谈,见下文)。在fi之后,添加这一行:

cd $PROJECT

由于某些不明原因,脚本没有 cd 到项目根目录。在处理脚本假定位于项目根目录的 gdb.setup 文件时,这会导致非常错误的行为。添加此行将修复它。

确保在 emacs 中使用常用命令调用 ndk-gdb:

(gdb "ndk-gdb ...")

不要使用 gud-gdb(奇怪的是,这是使用 gdb 的旧 emacs 方式,与您正在搜索的漂亮 UI 无关)。将 ... 替换为您的论点 (concat ...) 或您希望的任何内容。无论如何,我强烈建议使用 --project 选项。如果您不这样做,并且您位于项目外文件的缓冲区中,则脚本将找不到根目录。更糟糕的是,如果您在另一个 Android 项目的文件中,它会找到该项目的根目录(甚至可能在 gdb 会话失败之前将 gdb.setup 和其他内容复制到其中)。所以给那个该死的 --project 选项。如果您使用的是 emacs 桌面命令集,请执行以下操作:

(gdb (concat "ndk-gdb --project=" desktop-dirname ...))

(当然,假设您的 .emacs.desktop 位于项目的根目录)。

现在您终于可以使用 gud UI 进行调试了,在源代码级别设置断点。 请注意,我使用的是 emacs 23.3.1 (gdb-ui.el),因此不需要 24 即可。

【讨论】:

    【解决方案2】:

    你试过了吗?

    将 android-sdk-mac_x86/platform-tools 和 android-ndk-r5b 添加到 PATH 环境中。之后,使用 ndk-gdb 脚本启动 gdb 模式。

    M-x gdb
    Run gdb (like this): ndk-gdb --verbose --start --project=your_NDK_project_dir
    

    【讨论】:

    • 好吧,奇怪的是我的 PATH 环境变量没有被 emacs-gdb 拾取。我必须这样做'/Developer/android-ndk-r5b/ndk-gdb --verbose --启动 --adb=/Developer/android-sdk-mac_x86/platform-tools/adb --project=/Developer/Projects/testproj' 让 ndk-gdb 正常运行。
    • 正如您将在上面的编辑中看到的那样,是的,我尝试像那样运行 gdb,但它不会导致 emacs 和 ndk-的 gdb-server 可执行文件之间建立有用的连接gdb 运行。 这对您有用吗? 如果是,您是否进行了任何特定配置以使其正常工作?
    • 我尝试了几个 Emacs 版本,版本 23.2 (9.0) 有效,但版本 24.0.50 (9.0) 与您的情况不同(未定义命令:“1-inferior-tty-set” )。我没有任何 .emacs 文件,我不确定有什么区别。
    • 你能告诉我两个版本是否都在使用 gdb-mi 吗? (在 /Applications/Emacs.app/Content/Resources/lisp/progmodes/gdb-mi.el 中找到我的 Emacs 23.1 安装)
    • 就是这样。 23.2 版有 gdb-ui,24.0.50 版有 gdb-mi。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多