问题的描述与LLDB SBProcess 在启动 Ubuntu 18.04 时卡住。
每当我启动目标时,进程就会陷入启动状态并且永远不会启动。我在 bash 中尝试过 lldb ,它运行得很好。我已通读教程中的文档,但找不到有关启动状态的解释,或如何发现导致其卡住的原因。
系统:Ubuntu 16.04 64位
重现错误的最简单代码如下:
import lldb
exe = './a.out'
db = lldb.SBDebugger.Create()
db.SetAsync(False)
target = db.CreateTarget('a.out')
launch_info = lldb.SBLaunchInfo(None)
launch_info.SetExecutableFile (lldb.SBFileSpec(exe), True)
error = lldb.SBError()
print(error)
process = target.Launch (launch_info, error)
print(error)
print(process)
a.out
由helloworld.c
编译。运行上面的python代码,输出如下:
error: <NULL>
error: unable to locate lldb-server-16.0.6
SBProcess: pid = 0, state = launching, threads = 0, executable = a.out
当我在 ubuntu 的 cmd 上输入
lldb-server-16.0.6
时,它输出:
Usage:
lldb-server-16.0.6 v[ersion]
lldb-server-16.0.6 g[dbserver] [options]
lldb-server-16.0.6 p[latform] [options]
Invoke subcommand for additional help
这意味着
lldb-server-16.0.6
已经在环境中了。
我也尝试了上述问题的解决方案(LLDB SBProcess 在启动 Ubuntu 18.04 时卡住了),但没有成功。
更新方法解决以上问题。
我在https://github.com/lldb-tools/lldb-mi/issues/66
找到了解决方案我通过设置解决了这个问题:
导出 LLDB_DEBUGSERVER_PATH=/usr/bin/lldb-server-16.0.6
然后我再次运行Python代码。还有一个问题:
error: <NULL>
error: Cannot launch '/my/path/to/a.out': personality set failed: Operation not permitted
SBProcess: pid = 0, state = launching, threads = 0, executable = a.out
请给我一些解决这个问题的方法。谢谢!
personality set failed: Operation not permitted
我在 Docker 中尝试使用 LLDB 时遇到了这个错误。这个神秘的错误意味着它尝试禁用 ASLR 并失败(GDB 也尝试并失败,但无论如何它都会继续调试,而 LLDB 只是失败)。
所以你需要告诉 LLDB 不要禁用 ASLR。
直接运行
lldb
时:settings set target.disable-aslr false
当使用
lldb-dap
(例如来自VSC插件)时,上述命令似乎不起作用。您需要 "disableASLR": false
中的 launch.json
。
当使用Python API时,我并不完全确定。有
lldb.eLaunchFlagDisableASLR
,显然是针对 launch_flags
的 target.Launch(...)
参数,但手册上说默认情况下标志全为零,这已经是我们需要的值了。