尝试附加时 GDB 崩溃
GDB crashes when trying to attach
我正在尝试在 eclipse 中设置 gdb 调试器以附加到远程程序。这是我正在使用的设置:
对于开发 PC (dev),我在 Windows 7 PC 上使用 Eclipse Mars。 Eclipse 设置为使用 GCC/G++ 交叉编译器和 gdb 作为远程调试器。我正在使用 Sourcery CodeBench Lite 作为 windows 中的开发工具。
dev> gdb --version
dev> GNU gdb (Sourcery CodeBench Lite 2014.05-25) 7.7.50.20140217-cvs
目标 PC 是 RHEL 7,我在其中使用 gdbserver 以便我可以远程调试我的应用程序。
target> gdbserver --version
target> GNU gdbserver (GDB) Red Hat Enterprise Linux 7.6.1-64.el7
Copyright (C) 2013 Free Software Foundation, Inc.
我在 eclipse 中有两个调试配置,一个用于远程调试,另一个用于附加到目标 PC 中 运行 的远程程序。使用远程调试配置调试我的程序没有问题,但是,当我尝试附加到远程程序时,出现以下错误:
以下是我如何设置调试器以附加到远程应用程序:
我使用以下 gdbinit 脚本:
handle SIG34 nostop noprint pass
set verbose on
set sysroot
我也尝试过在两侧使用相同的 GDB 版本并得到相同的结果。在这一点上,我愿意接受任何建议!
好的,所以我想我成功了。问题似乎是因为我在目标 PC 上使用的旧 GDB 版本。正如我在问题中提到的,我使用的是 GDB 7.6.1-64.el7。为了更新 GDB,我从 http://ftp.gnu.org/gnu/gdb/ 下载了最新的源代码。请记住同时更新 gdb 和 gdbserver。 gdbserver 在下载包中提供。以下是我将 gdb 归档文件放入 target/tmp 后采取的步骤:
target_pc/tmp> gtar -xvf gdb-7.11.tar.gz
target_pc/tmp> cd gdb-7.11
target_pc/tmp/gdb-7.11> ./configure
target_pc/tmp/gdb-7.11> make
target_pc/tmpgdb-7.11> cd gdb/gdbserver
target_pc/tmpgdb-7.11/gdb/gdbserver> ./configure
target_pc/tmpgdb-7.11/gdb/gdbserver> make
成功构建后,您可以使用 make install 或复制 gdb 和 gdbserver 二进制文件并将其放入 /usr/bin 或 /bin 目录。您还需要重新启动 gdbserver:
/usr/bin/gdbserver --remote-debug --multi :8000
您可以将此行添加到 /etc/rc.local 以便在 linux 启动时启动 gdbserver。
我正在尝试在 eclipse 中设置 gdb 调试器以附加到远程程序。这是我正在使用的设置:
对于开发 PC (dev),我在 Windows 7 PC 上使用 Eclipse Mars。 Eclipse 设置为使用 GCC/G++ 交叉编译器和 gdb 作为远程调试器。我正在使用 Sourcery CodeBench Lite 作为 windows 中的开发工具。
dev> gdb --version
dev> GNU gdb (Sourcery CodeBench Lite 2014.05-25) 7.7.50.20140217-cvs
目标 PC 是 RHEL 7,我在其中使用 gdbserver 以便我可以远程调试我的应用程序。
target> gdbserver --version
target> GNU gdbserver (GDB) Red Hat Enterprise Linux 7.6.1-64.el7
Copyright (C) 2013 Free Software Foundation, Inc.
我在 eclipse 中有两个调试配置,一个用于远程调试,另一个用于附加到目标 PC 中 运行 的远程程序。使用远程调试配置调试我的程序没有问题,但是,当我尝试附加到远程程序时,出现以下错误:
以下是我如何设置调试器以附加到远程应用程序:
我使用以下 gdbinit 脚本:
handle SIG34 nostop noprint pass
set verbose on
set sysroot
我也尝试过在两侧使用相同的 GDB 版本并得到相同的结果。在这一点上,我愿意接受任何建议!
好的,所以我想我成功了。问题似乎是因为我在目标 PC 上使用的旧 GDB 版本。正如我在问题中提到的,我使用的是 GDB 7.6.1-64.el7。为了更新 GDB,我从 http://ftp.gnu.org/gnu/gdb/ 下载了最新的源代码。请记住同时更新 gdb 和 gdbserver。 gdbserver 在下载包中提供。以下是我将 gdb 归档文件放入 target/tmp 后采取的步骤:
target_pc/tmp> gtar -xvf gdb-7.11.tar.gz
target_pc/tmp> cd gdb-7.11
target_pc/tmp/gdb-7.11> ./configure
target_pc/tmp/gdb-7.11> make
target_pc/tmpgdb-7.11> cd gdb/gdbserver
target_pc/tmpgdb-7.11/gdb/gdbserver> ./configure
target_pc/tmpgdb-7.11/gdb/gdbserver> make
成功构建后,您可以使用 make install 或复制 gdb 和 gdbserver 二进制文件并将其放入 /usr/bin 或 /bin 目录。您还需要重新启动 gdbserver:
/usr/bin/gdbserver --remote-debug --multi :8000
您可以将此行添加到 /etc/rc.local 以便在 linux 启动时启动 gdbserver。