【问题标题】:Does lldb automatically terminate an infinite loop?lldb 会自动终止无限循环吗?
【发布时间】:2017-04-27 17:40:55
【问题描述】:

我写了一个像下面这样的无限循环

for (size_t i = words-1; i >= 0; --i) {
    ... data[i] ...
}

它还会访问 OOB 内存。可执行文件因核心转储而崩溃。使用带有 coredump 的 gdb 显示当 i 是一个巨大的数字时它会崩溃。

但是,lldb 可以成功运行相同的可执行文件而不会发生任何崩溃... LLDB 是否“解释”了代码并为我解决了问题?

【问题讨论】:

  • 注意它是impossible 用于调试器(或任何机器代码)来检测通用无限循环(当然你可以为最明显的循环制定规则)。

标签: lldb


【解决方案1】:

不,对于调试器来说,这将是一件可怕的事情!一般来说,调试器,尤其是 lldb,会尽量让程序尽可能接近正常运行。当运行“完全”时,调试器必须做一些侵入性的工作——例如。当有共享库加载要读取新库时,它必须暂停,并且调试器首先破解发送到程序的信号。因此,特别是在多线程程序中,调试器可能会扰乱时序。但它不应该改变程序中代码的指令流。

如果您可以在命令行中而不是在 lldb 中运行时显示崩溃的测试用例,请向 lldb 错误跟踪器提交错误:

https://bugs.llvm.org

并包含示例。

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多