通过emacs运行gdb时设置gdb的环境

7
我有一个程序希望通过emacs使用gdb进行调试。为了运行开发版本的程序,我有一个shell脚本,可以让我源代码查看正确的库等。但是我无法解决的是如何要求emacs/gud在执行gdb之前运行这个文件。
我尝试使用命令“source env.sourceme && gdb my_program”,但是emacs抱怨它不知道“source”的意思。我猜它并没有真正地在shell中运行gdb,所以这些技巧行不通。
那么,我该如何说服gud/emacs或其他工具在我的自定义环境中运行gdb?我已经有了一个hacky解决方案,但我觉得我可能漏掉了某些东西。
3个回答

5

gdb有自己的语法来设置环境变量:

set environment varname [=value]

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


1
与我之前的回复类似,我想利用现有的基础设施,而不是编写更多的代码来满足gdb的需求。 - abingham
如果我在一个文件中放置一个“设置环境变量名[=值]”列表,并在emacs gdb中执行“source file”,那么对我很有效。 - 719016
@200508519211022689616937 哦,很好,因为那正是我在我的答案中写的 :-) [Emacs gud-gdb 只是运行 gdb。] - Thomas

3
您可以使用setenv对Emacs环境进行修改,可以通过交互方式(M-x setenv)或编程的方式进行操作:
(setenv "FOOBAR" "whatever")

当你运行 gud-gdb 时,无论你使用 setenv 设置了什么值,都将被传递给 gdb 进程。

我想我应该澄清一下。我想利用现有的shell脚本(由构建生成,因此相对方便),而不是为了emacs而需要复制其功能。无论如何,我不想更改整个emacs进程的环境变量,只想更改gdb子进程的环境变量。 - abingham

3

你的hacky解决方案是什么?

为什么不创建一个包装脚本,该脚本会调用env.sourceme,然后运行gdb?

#!/usr/bin/env bash

source env.sourceme
gdb -i=mi $1

那基本上就是我的“hacky解决方案”;)它实际上更具有通用性,因为它将运行任何命令(通过$ *),但精神上相同。我想我只是感到惊讶,这不是一个简单的事情,让gud为我源文件... - abingham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接