linux - GDB 和调试进程的独立工作目录

标签 linux debugging gdb working-directory

在我正在处理的项目中,我使用 gdb 进行调试 - 我希望能够从 gdb 调用 make - 但我不能,因为那意味着工作目录将是不正确。这是我的目录布局和我尝试过的两个选项:

Project
 ├─bin
 │ ┗━Option 1
 ├─build
 │ ├─debug.sh
 │ ┟─makefile
 │ ┗━Option 2
 ├─include
 └─src

这是使用选项 1

debug.sh 的内容
#!/bin/bash
gdb --cd=../bin ../bin/ProjectBinary -ex run

选项 1:

当我调用 ./debug 时,程序正确运行 - 工作目录正确设置为 Project/bin。但是我无法从 gdb 调用 make,因为 makefile 不在当前目录中。

选项 2(debug.sh 未显示):

当我调用 ./debug 时,程序失败,因为工作目录设置不正确 - 但我可以从 gdb 成功调用 make

我如何获得两全其美并允许它,以便我可以从 gdb 调用 make,以及工作目录对于可执行文件是正确的 - 即我如何有 2 个工作目录,一个用于被调试的程序,一个用于 gdb 本身?

最佳答案

留在 bin/ 但将 "-c"选项传递给 ma​​ke 以便它切换到 ../build 首先

$ cd ./bin
$ gdb ProjectBinary
(gdb) make -C ../build

您还可以创建调用 build/Makefilebin/Makefile:

bin/生成文件

.PHONY: all
all:
        make -C ../build

(在调用 make 的行的开头将空格更改为制表符)

然后运行:

$ gdb ProjectBinary
(gdb) make

关于linux - GDB 和调试进程的独立工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16264671/

相关文章:

javascript - 请参阅 IOS Safari 引发的 Javascript 错误

gdb - 如何知道在哪个库中定义了特定功能?

javascript - 将 Chrome 开发控制台转储到文本文件?

c# - 由另一个产生的调试进程

java - 调用gdb调试java程序

python - 使用命名管道根据输出将输入发送到程序

Java AsynchronousFileChannel 在 Linux 中有很多打开的文件处理程序

linux - Go exec.CommandContext 在上下文超时后不会被终止

php - 我正在经历一个 php 后台进程问题

linux - Ansible - 未安装 winrm 或请求