android ndk的ndk-gdb与emacs的整合?

任何人都可以告诉我如何使用gdb模式emacs内运行ndk-gdb ? 我目前正在shell缓冲区中运行它。 我喜欢有一个方法来自动同步一个源文件缓冲区与gdb当前电脑当我rest或步骤。 还有更多的东西,比如设置来自源代码的中断,显示gdb本地文件的缓冲区等,gdb命令的快捷方式也是很重要的。

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

emacs中的Android模式和shell(运行ndk-gdb)让我可以看到我需要的所有东西,但是如果我能得到一个源缓冲区来与debugging器同步,或者得到相当于在这里介绍EmacsWiki。

仅供参考,我目前使用eclipse进行java端的debugging和开发,但是发现它不稳定,难以设置本地工作,尽pipesequoyah的可用性,此外,eclipse没有emacs。

[追加]

使用ndk-gdb作为gdb命令运行Mx gdb(见下文)会产生一个名为gud的缓冲区,其模式行语句为“(Debugger:run [initializing …])”。 缓冲区不接受gdb命令,也不接受emacs gdb命令 – (Ms,Mn等结果在<>中

输出:

当前目录是/ Users / jpschelter /
 Android NDK安装path:/ Developer / android-ndk-r5b
使用特定的adb命令:/ Developer / android-sdk-mac_x86 / platform-tools / adb
 ...
 ......
 ...
 (没有finddebugging符号)
警告:无法finddynamic链接器断点function。
 GDB将无法debugging共享库初始值设定项
并跟踪显式加载的dynamic代码。
来自/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-thread-info”。 尝试“帮助”。
 (gdb)未定义的命令:“9-break-list”。 尝试“帮助”。

被称为*threads of**input/output of**breakpoints of*缓冲区也被创build,但是是空的。

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

请注意,使用ndk-gdb的命令行运行Mx gud-gdb似乎导致在shell中运行ndk-gdb,所以问题似乎在emacs的gdb-modeconfiguration中。

Solutions Collecting From Web of "android ndk的ndk-gdb与emacs的整合?"

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

打电话给GDB(最后一行),做到这一点:

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

–annotate = 3选项对于emacs gud接口是强制性的,没有它就不能工作(这就是为什么* gud *没有响应)。

但是你已经半途而废了 现在,它将工作,但只有当你从项目根目录的文件(如AndroidManifest.xml)调用ndk-gdb的时候。 由于大多数情况下这是不太可能的,因为你是C / C ++程序员,而且你正在使用的源代码是在jni目录下或者更深,所以你需要做更多的事情。 ndk-gdb脚本是有点bug,它会高兴地混淆你在这一个(和gdb本身也不会帮助很多)。

在脚本中search“PROJECT = $ OPTION_PROJECT”。 你将在一个很长的if … else … fi子句中负责find项目的根源(如果它没有与-project选项一起给出,虽然这样做不会解决问题I谈谈,见下文)。 在fi之后,添加这一行:

 cd $PROJECT 

出于一些不明的原因,脚本不能cd到项目根目录。 这在处理gdb.setup文件的时候会导致非常错误的行为,脚本假定在项目根目录下。 添加这一行将解决它。

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

 (gdb "ndk-gdb ...") 

不要使用gud-gdb(奇怪的是,这是使用gdb的旧emacs方式,与您所search的好用户界面无关)。 用你的论点replace…,(concat …)或任何你想要的。 我强烈推荐使用–project选项。 如果你没有,并且你在一个超出项目的文件的缓冲区中,脚本将不会find根目录。 更糟的是,如果你在另一个Android项目中的文件,它会find该项目的根(也许甚至复制gdb.setup和东西进入之前,gdb会话失败)。 所以给那个该死的项目选项。 如果您使用emacs桌面命令集,请执行以下操作:

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

(当然,假设你的.emacs.desktop是项目的根源)。

现在你可以用gud UI进行debugging,在源代码级设置断点。 请注意,我使用emacs 23.3.1(gdb-ui.el),所以没有必要有24这个工作。

你尝试过吗?

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

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