0

我做了以下事情:

  1. 将 Makefile 项目导入 Eclipse CDT。
  2. 使用 g++ 的 -ggdb 选项从命令行编译程序。
  3. 从命令行运行程序
  4. 在 Eclipse CDT 中设置一些断点
  5. 将 Eclipse CDT 调试器 (gdb) 附加到我的程序生成的子进程(子进程运行来自同一项目的程序)。

此时我在控制台中收到错误消息

没有名为 /home/oswald/Eclipse/CDT/Workspace/Project/path/to/header.h 的源文件。

当我恢复程序时,我的所有断点都被跳过。我怎样才能让我的断点工作?

一些附加说明:

  • 不涉及共享库。
  • Eclipse 靛蓝,gdb 7.4,Ubuntu 12.04
  • 使用命令行将 gdb 附加到进程,我可以将断点设置为header.h:257header.h在文件夹中/home/oswald/Eclipse/CDT/Workspace/Project/path/to/)。然后 gdb 遵循这个断点。
  • 使用命令行将 gdb 附加到进程,我无法将断点设置为/home/oswald/Eclipse/CDT/Workspace/Project/path/to/header.h:257,我从 gdb 获得与使用 Eclipse CDT 时相同的消息。
  • Eclipse CDT 使用GDB (DSF) Attach to Process Launcher。切换到标准附加到进程启动器会产生系统无法列出正在运行的进程的错误消息。
  • 调试配置中的 Source Lookup Path 设置为默认值(Absolute File Path、Program Realtive File Path、Project)。我尝试了各种其他设置,但都没有奏效。
4

1 回答 1

1

作为一种解决方法,我编写了一个 shell 脚本,它生成一个 .gdbinit 文件,其中包含适当的目录条目:

#!/bin/sh

PROJECT=/home/oswald/Eclipse/CDT/Workspace/Project

find $PROJECT -name "*.h*" -o -name "*.c*" \
  | sed 's:/[^/]*$::' \
  | sort \
  | uniq \
  | sed 's/^/directory /' > $PROJECT/.gdbinit

并将 Eclipse CDT 配置为使用该 .gdbinit 文件。

于 2012-11-26T14:15:04.950 回答