建立gdb';当通过emacs运行时,它会影响环境

建立gdb';当通过emacs运行时,它会影响环境,emacs,gdb,gud,Emacs,Gdb,Gud,我有一个程序,我想通过emacs与gdb一起调试。为了运行这个程序的开发版本,我有一个shell脚本,可以用来设置调用环境以查看正确的库,等等。我无法解决的是如何在执行gdb之前让emacs/gud来获取这个文件的源代码 我尝试过使用像“source env.sourceme&&gdb my_program”这样的命令,但emacs抱怨它不知道“source”是什么意思。我想它并不是真的在一个shell中运行gdb,所以这些技巧是行不通的 那么,我如何说服gud/emacs/whatever在我

我有一个程序,我想通过emacs与gdb一起调试。为了运行这个程序的开发版本,我有一个shell脚本,可以用来设置调用环境以查看正确的库,等等。我无法解决的是如何在执行gdb之前让emacs/gud来获取这个文件的源代码

我尝试过使用像“source env.sourceme&&gdb my_program”这样的命令,但emacs抱怨它不知道“source”是什么意思。我想它并不是真的在一个shell中运行gdb,所以这些技巧是行不通的


那么,我如何说服gud/emacs/whatever在我的定制环境中运行gdb呢?我已经准备好了一个黑客解决方案,但我觉得我一定错过了什么。

您可以使用
setenv
以交互方式(
M-x setenv
)或编程方式修改Emacs环境:

(setenv“FOOBAR”任意)

运行
gud gdb
时,使用
setenv
设置的任何内容都将传递到
gdb
进程。

您的黑客解决方案是什么

为什么您不使用一个包装器脚本来生成
env.sourceme
,然后运行gdb呢

#/usr/bin/env bash
source env.sourceme
gdb-i=mi$1

gdb有自己的语法:


不要使用shell脚本,而是使用上述语法在文件中编写变量定义,然后
source
从正在运行的gdb会话中删除该文件。请注意,这不是bash内置的
source
命令,但是,bash风格的环境变量定义自然不会起作用。

我想我应该澄清一下。我希望利用现有的shell脚本(它是由构建生成的,因此比较方便),而不需要为了emacs而复制它的功能。在任何情况下,我都不想改变整个emacs流程的环境变量,只想改变gdb子流程。与我对上一个响应的评论类似,我想利用我现有的基础设施,而不是编写更多的代码来安抚gdb。如果我列出“set-environment varname[=value]”,这对我来说是有效的行,然后在emacs gdb中执行
源文件
。@200508519211022689616937哦,很好,因为这正是我在回答中写的:-)[emacs gud gdb只是运行gdb.]这本质上是我的“黑客解决方案”;)它实际上是一个更通用的用途,因为它可以运行任何命令(通过
$*
),但精神上是一样的。我想我只是很惊讶让gud为我找到文件的来源不是一件简单的事。。。
set environment varname [=value]