【问题标题】:LLDB not stopping with SIGINT (control-c)LLDB 不停止 SIGINT (control-c)
【发布时间】:2019-09-01 16:04:13
【问题描述】:

我正在尝试使用 LLDB 在 OSX 上调试程序,而 control-C 无法停止该程序。它似乎处于无限循环中,我想看看它在哪里;因此我不能只使用断点。这曾经对我有用——我曾经能够控制-C 发送 SIGINT,LLDB 尊重它,并使用相同的工具链停止了这台计算机上的程序。我在终端中看到了^C,但它被忽略了。我还尝试通过其他两种方式将信号发送到 lldb 进程:

  1. 通过活动监视器的发送信号到进程功能
  2. 通过 pkill -SIGINT lldb

但是,这也不起作用。另一方面,control-z 确实可以停止 lldb,但这不是我需要的(即能够检查程序状态)。

我在内置终端应用程序和 iTerm2 上都试过了,但我发现两者的行为相同。

版本信息

lldb --version
lldb-1000.11.38.2
  Swift-4.2

我认为这是与 XCode 一起安装的 lldb 版本。升级后的 XCode(我不直接使用)可能会破坏这一点。

更新:我将补充一点,在 lldb 中变量名也不会自动完成——我很确定这也可以正常工作。例如,如果我输入 p 然后开始输入变量名,它不会制表符完成。我正在添加此更新以防万一。

【问题讨论】:

  • 您是从 lldb 中运行您的进程,还是附加到它。我认为“p”选项卡完成可能吗?在 Xcode 的调试器控制台窗口中工作,但在命令行 lldb 中不起作用 - 它是一个任意 C++/etc 表达式,并且 lldb 不解析它的内容。其他可变打印机制(如“v”)将完成制表符。 Fwiw lldb 版本有点旧,可能是 2018 年 9 月至 11 月。当前发布的 Xcode 将为您提供 lldb-1001.something;今年秋季发布的 Xcode 将为您提供 lldb-1100.something。
  • 您是否尝试使用上述方法 1 和 2 向您正在调试的进程发送 SIGINT?如果这些不起作用,那么可能是您正在调试的进程正在阻止 SIGINT。也许尝试发送一些其他信号(如 SIGUSR1)?那可能不会被阻塞,然后只要你使用process handle SIGUSR1 -p 0 使信号不被转发,你就不会改变程序执行。
  • 谢谢。我能够解决这个问题。一些有趣的学习: 1)在旧版本(1000.11.38.2)中,当我没有使用命令脚本(仅包含run)运行但手动运行时,它尊重SIGINT; 2)当我升级到 1001.0.13.3 时,它就可以工作了。现在升级没有实际意义,但似乎带有命令脚本的旧版本以某种方式阻止了 SIGINT。

标签: terminal lldb


【解决方案1】:

请参阅上面的评论——当使用包含run 的命令脚本时,这似乎是 lldb 版本 1000.11.38.2 的错误。升级和/或不使用带有run 的命令脚本允许程序被中断。

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 2019-09-26
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    相关资源
    最近更新 更多