2017-06-27 53 views
2

当试图在Linux上运行(Ubuntu的16.04)的可执行文件,我可以gdb下运行可执行文件:但是为什么我从gdbserver得到“不可执行格式:成功”,但在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'

回答

3

问题是我的二进制文件对于远程传输来说太大了。我通过阅读gdb的上述提示来实现此目的,在gdb中致电set sysroot。使用这个,我可以使用gdbserver调试可执行文件。

请注意,如果您只会进行本地调试,则可以将其添加到您的~/.gdbinit。在我的情况下,当使用CLion进行调试时,我使用gdbserver(因为有时直接调试似乎不起作用...)

相关问题