尝试在Linux(Ubuntu 16.04)上运行可执行文件时,我可以在gdb
下运行该可执行文件:
gdb ./bazel-bin/drake/systems/sensors/rgbd_camera_test
但是,如果我尝试在
gdbserver
下运行可执行文件并进行连接,则完全不同:tty1$ gdbserver localhost:9999 ./bazel-bin/drake/systems/sensors/rgbd_camera_test
tty2$ gdb
(gdb) target remote localhost:9999
Remote debugging using localhost:9999
Reading ${BAZEL_ROOT}/bazel-out/clang-3.9-linux-dbg/bin/drake/systems/sensors/rgbd_camera_test from remote target...
warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
"target:${BAZEL_ROOT}/bazel-out/clang-3.9-linux-dbg/bin/drake/systems/sensors/rgbd_camera_test": not in executable format: Success
我正在将
bazel
(0.4.5)与clang-3.9
一起使用。如果使用以下命令,则会得到相同的结果:bazel run --run_under=gdb //drake/systems/sensors:rgbd_camera_test`
和
--run_under 'gdbserver localhost:9999'
。 最佳答案
问题是我的二进制文件太大,无法进行远程传输。我通过从gdb
中读取上述提示,并在set sysroot
中调用gdb
来实现这一点。使用此工具,我可以使用gdbserver
调试可执行文件。
请注意,如果只执行本地调试,则可以将其添加到~/.gdbinit
中。在我的情况下,在使用CLion进行调试时,我使用gdbserver
(因为有时直接调试似乎不起作用...)
关于c++ - 为什么我从gdbserver获得 “not in executable format: Success”,但在gdb中一切正常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44791385/