GDB权限

3

我正在尝试在Ubuntu上对一个可执行文件运行gdb。然而,当我在gdb中尝试运行run命令时,会出现以下错误。

/vagrant/unit_test: cannot execute: Permission denied
During startup program exited with code 126.

我已确保./unit_test文件具有适当的执行权限。 我还尝试在gdb前使用sudo运行它,sudo gdb ./unit_test
可能需要知道我正在使用Vagrantfile启动虚拟环境。 以前有人遇到过这个问题吗?


那个文件的完整路径是什么?是/vagrant/unit_test(注意第一个斜杠,它指的是文件系统的根目录)吗?目录/vagrant的权限是什么?你能展示一下权限吗(例如 ls -l /vagrant/unit_test)? - alfunx
如果您在gdb中键入shell ldd /vagrant/unit_test,是否会看到任何错误? - Mark Plotnick
2个回答

5
似乎虚拟文件系统在使用gdb时可能不适合某些可执行文件(例如由Qt构建的可执行文件)。
我的情况是使用VirtualBox共享文件夹时出现了问题。当一个可执行文件位于Windows主机的共享文件夹中时,在Linux客户机下使用GDB会报“无法执行:权限被拒绝”,但是该文件可以正常执行。但是,当我将可执行文件移动到Linux客户机的extfs文件系统中时,它就可以工作了。
奇怪的是,一个基于stdio的简单“Hello, World”命令行程序可以被很好地调试,而由Qt构建的应用程序则不能。为了论证这一点,以下是ldd针对没有使用Qt构建的hello world程序的详细输出:
linux-vdso.so.1 (0x00007ffc8bd07000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fda83d71000)
/lib64/ld-linux-x86-64.so.2 (0x00007fda83f7d000)

这是针对Qt Mandelbrot示例的展示:
linux-vdso.so.1 (0x00007ffd48441000)
libQt5Widgets.so.5 => /home/hostilefork/Qt/5.13.1/gcc_64/lib/libQt5Widgets.so.5 (0x00007f09fa7b4000)
libQt5Gui.so.5 => /home/hostilefork/Qt/5.13.1/gcc_64/lib/libQt5Gui.so.5 (0x00007f09f9f68000)
libQt5Core.so.5 => /home/hostilefork/Qt/5.13.1/gcc_64/lib/libQt5Core.so.5 (0x00007f09f97b9000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f09f9613000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f09f9486000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f09f946c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f09f9280000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f09f925f000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f09f91cb000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f09f8fae000)
libicui18n.so.56 => /home/hostilefork/Qt/5.13.1/gcc_64/lib/libicui18n.so.56 (0x00007f09f8b15000)
libicuuc.so.56 => /home/hostilefork/Qt/5.13.1/gcc_64/lib/libicuuc.so.56 (0x00007f09f875d000)
libicudata.so.56 => /home/hostilefork/Qt/5.13.1/gcc_64/lib/libicudata.so.56 (0x00007f09f6d78000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f09f6d72000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f09f6d6d000)
libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f09f6c50000)
/lib64/ld-linux-x86-64.so.2 (0x00007f09fb034000)
libGLX.so.0 => /usr/lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f09f6c1c000)
libGLdispatch.so.0 => /usr/lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f09f6b5d000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f09f6ae9000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f09f69af000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f09f6986000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f09f6782000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f09f657a000)
libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f09f6363000)

很可能是这个原因导致了不同的结果。


1
是的,我正在尝试使用QT调试一个应用程序,共享文件夹正是问题所在。非常奇怪。 - Ryan Stankiewicz
非常感谢!VirtualBox共享文件夹是问题所在,谁会想到呢。 - Frederic

1
如果在使用vagrant时遇到此错误,请尝试将mount_options: ["dmode=0770", "fmode=0770"]添加到config.vm.synced_folder方法调用中,例如在Vagrantfile中:
config.vm.synced_folder "C:\\Projects", "/projects", mount_options: ["dmode=0770", "fmode=0770"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接