lldb 错误:无法启动 a.out:个性设置失败:不允许操作

问题描述 投票:0回答:1

问题的描述与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

请给我一些解决这个问题的方法。谢谢!

lldb
1个回答
0
投票

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(...)
    参数,但手册上说默认情况下标志全为零,这已经是我们需要的值了。

© www.soinside.com 2019 - 2024. All rights reserved.