LLDB调试Linux X86_64程序时execve权限拒绝问题求助
问题描述
用Clang编译出Linux X86_64可执行文件my_out,直接运行./my_out正常,但用lldb my_out调试时,能启动LLDB、使用list命令、在main函数设置断点b main,执行run命令时报错:
error: execve failed: Permission denied
已为以下文件添加+x权限:
./my_out ./clang/host/linux-x86/clang-r487747c/bin/lldb-argdumper ./clang/host/linux-x86/clang-r487747c/bin/lldb ./clang/host/linux-x86/clang-r487747c/runtimes_ndk_cxx/x86_64/lldb-server
机器信息
lldb -v lldb version 17.0.2 (llvm-toolchain/out/llvm-project/lldb revision d9f89f4d16663d5012e5c09495f3b30ece3d2362) clang revision d9f89f4d16663d5012e5c09495f3b30ece3d2362 llvm revision d9f89f4d16663d5012e5c09495f3b30ece3d2362
./clang -v Android (10087095, +pgo, +bolt, +lto, -mlgo, based on r487747c) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /opt2/my_name/Android_Code/15_Android/prebuilts/clang/host/linux-x86/clang-r487747c/bin/. Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.4 Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Candidate multilib: x32;@mx32 Selected multilib: .;@m64
排查与解决思路
- 检查
lldb-server的实际调用路径:LLDB可能优先使用系统默认路径的lldb-server而非你指定的NDK版本,用which lldb-server查看当前优先版本,确保其有执行权限;或者在LLDB中执行settings set target.exec-search-path ./clang/host/linux-x86/clang-r487747c/runtimes_ndk_cxx/x86_64/指定服务器路径。 - 验证目录权限:确保
my_out所在目录具备+x权限(用户需能进入目录),目录无执行权限时,即便文件有权限也无法正常调试。 - 检查SELinux状态:若系统开启SELinux,可能限制LLDB调试进程。可临时执行
sudo setenforce 0关闭SELinux测试,若解决问题需调整SELinux策略或为相关文件添加正确上下文。 - 批量设置LLDB工具权限:给Clang工具链
bin目录下所有LLDB相关工具添加执行权限,执行chmod +x ./clang/host/linux-x86/clang-r487747c/bin/lldb-*。 - 尝试root权限调试:执行
sudo lldb my_out,排查是否因普通用户权限不足导致问题。 - 检查动态链接器:用
readelf -l my_out | grep INTERP查看程序的动态链接器路径,确保该链接器存在且有执行权限,同时LLDB可正常访问。
内容的提问来源于stack exchange,提问作者xiaoqiang-wang
相关产品推荐
相关产品推荐

