- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
谁能告诉我如何使用 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 等导致 <>
输出:
Current directory is /Users/jpschelter/Android NDK installation path: /Developer/android-ndk-r5bUsing specific adb command: /Developer/android-sdk-mac_x86/platform-tools/adb...... ......(no debugging symbols found)warning: Unable to find dynamic linker breakpoint function.GDB will be unable to debug shared library initializersand track explicitly loaded dynamic code.0xafd0e21c in nanosleep () from /Developer/Projects/ECS/DIGG/Projects/droid/obj/local/armeabi/libc.so(gdb) Undefined command: "1-inferior-tty-set". Try "help".(gdb) Undefined command: "2-gdb-set". Try "help".(gdb) Undefined command: "3-gdb-set". Try "help".(gdb) Undefined command: "4-file-list-exec-source-files". Try "help".(gdb) Undefined command: "5-file-list-exec-source-file". Try "help".(gdb) Undefined command: "6-gdb-show". Try "help".(gdb) Undefined command: "7-stack-info-frame". Try "help".(gdb) Undefined command: "8-thread-info". Try "help".(gdb) Undefined command: "9-break-list". Try "help".
称为 *threads of*
、*input/output of*
和 *breakpoints of*
的缓冲区也被创建,但都是空的。
浏览我的 emacs 的 gdb-mi.el 源,并与 gdb-debug-log 输出进行比较,看起来 gdb-mi 正在尝试将这些参数发送到 gdb 可执行文件,但 gdb-server 没有按预期响应命令?
请注意,使用 ndk-gdb 的命令行运行 M-x gud-gdb 似乎相当于在 shell 中运行 ndk-gdb,因此问题似乎出在 emacs 中 gdb-mode 的配置中。
最佳答案
我在 emacs 下运行 gdb 时遇到了完全相同的问题:*gud* 窗口没有响应命令。但是,ndk-gdb 在 shell 中运行良好。为了让它在 emacs gud UI 下工作,我不得不稍微修改一下 ndk-gdb 脚本。
在调用 GDB(最后一行)时,执行以下操作:
$GDBCLIENT --annotate=3 -x `native_path $GDBSETUP`
--annotate=3 选项对于 emacs gud 接口(interface)是强制性的,没有它就无法工作(这就是 *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 session 失败之前将 gdb.setup 和其他内容复制到其中)。所以给那个该死的 --project 选项。如果您使用的是 emacs 桌面命令集,请执行以下操作:
(gdb (concat "ndk-gdb --project=" desktop-dirname ...))
(当然,假设您的 .emacs.desktop 位于项目的根目录)。
现在您终于可以使用 gud UI 进行调试了,在源代码级别设置断点。请注意,我使用的是 emacs 23.3.1 (gdb-ui.el),因此不需要 24 即可。
关于android - android ndk的ndk-gdb与emacs的集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970062/
我通过“emacs --daemon”启动了 emacs 服务器。然后我开了几个客户端。 我想将 .emacs 配置的更改应用于所有客户端,而无需重新启动 emacs 守护程序。这可能吗? 最佳答案
我通过“emacs --daemon”启动了 emacs 服务器。然后我开了几个客户端。 我想将 .emacs 配置的更改应用于所有客户端,而无需重新启动 emacs 守护程序。这可能吗? 最佳答案
我看到了一些关于使 emacs 便携(在 Windows 上)的建议。我的 site-start.el 中有这个: (defvar program-dir (substring data-direct
我是一名狂热的 Vim 用户。我的 Vimrc 有 800 多行。我是一个喜欢定制环境的每个部分的修补匠。 Emacs 似乎更容易配置。所以我尝试一下 Emacs。 当您想要缩小时,请按 Emacs
我是一名狂热的 Vim 用户。我的 Vimrc 有 800 多行。我是一个喜欢定制环境的每个部分的修补匠。 Emacs 似乎更容易配置。所以我尝试一下 Emacs。 当您想要缩小时,请按 Emacs
偶尔在term中使用emacs时模式我会误运行emacs file而不仅仅是打开文件。这将在当前客户端内创建一个嵌套的 emacs 客户端。我的问题是如何只关闭内部客户端? 最佳答案 回答 您应该可以
我一直在慢慢学习 elisp 和 emacs 的新命令,并且一直在稳步构建我的 .emacs。必须保持控制台打开以重复打开和关闭 emacs 实例似乎不是测试的最佳选择,但是从 emacs 中运行 e
我正在寻找一个 emacs 服务器,以便 emacsclients 指定的文件 是相对于 emacsclients 的文件系统而不是服务器的文件系统。例如,如果我设置一个 机器“darkstar”上的
我试图将我所有的 emacs 配置置于版本控制之下,以便在不同的计算机之间轻松切换。实际上我的首选系统是 OSX (10.8.3) 和来自 http://emacsformacosx.com/ 的 e
我正在学习 emacs,我认为使用 emacs 的内置帮助功能开发设施将真正平滑学习击键的学习曲线。 使用 emacs 的内置帮助功能来查找命令名称及其击键的有效过程是什么? 例如,我忘记了关闭框架的
我一直在尝试将 emacs minibuffer 的字体/字体与 emacs 默认字体分开,但没有太多运气。 具体来说,我有兴趣使 minibuffer 字体大小更大以用于 emacs MULE,因为
大约 4 年以来,我一直是一个相当普通的 emacs 用户,但在自定义 emacs 和排除 elisp 故障时,我仍然是新手。最近,我开始自定义 emacs 作为我的 ruby 开发环境,并且我从
我希望 emacs 能够处理一些耗时的任务,而不阻塞输入。为此,我尝试了(其中插入的意思是用耗时的任务来代替) (call-process "emacs" nil 0 nil "--eval=(ins
我的 init.el 中有这个设置 (desktop-save-mode 1) 这很好用,只是我想知道: 如何更改它以将 .emacs.desktop 文件保存到 ~/.emacs.d 而不是 ~/
我是 Emacs 包的作者,偶尔在处理我的包时,我会遇到一个看起来很有用的函数并在我的代码中使用它。然后,在我发布后不久,有人使用旧的 Emacs 版本(但仍然是我想要支持的版本)会报告该功能未定
我用 (message "..some text...") 在我的 init 文件中,在 EMACS 加载时将消息发送到消息缓冲区。这是我查看我刚刚所做的更改导致启动崩溃的快速方法。 但是,我无法找到
简单的问题,我在 Emacs 中使用通用模式进行颜色编码。除了在这种语言中 " 和 ' 可以用来表示字符串之外,下面的代码很好用,如 'this is a string' 或 “这是一个字符串”。默认
有没有办法让我的 Emacs 以预定义的框架作为我附加的屏幕截图开始?我不太熟悉如何在我的 .emacs 脚本中执行此操作... 就这么简单: split-window-horizontally(
在emacs markdown-mode写markdown时,我想让electric-pair-mode自动关闭**bold**和 *italic*成对语法,即当输入一个 * 一秒时 * 应该自动出现
Emacs 是否有一个简单的原始缩进模式可以执行以下操作: 当我转到新行(按 Enter)时,复制上述行 用于缩进的任何空格 当我按 Tab 时,在我按 Tab 的地方插入可以配置的缩进字符(空格/制
我是一名优秀的程序员,十分优秀!