问题标签 [lldb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
20765 浏览

iphone - 在 LLDB 中获取有关坏内存地址的信息

我正在尝试在我的 iPhone 应用程序中调试 EXC_BAD_ACCESS。它在方法调用上崩溃,并且在方法的行上是EXC_BAD_ACCESS (code=1, address = xxx).

以前,我只是用来gdb info malloc-history <xxx>开始调试,但在LLDB.

我看到这个线程说要使用 Instruments,但是当我这样做时,我仍然会崩溃,但我无法弄清楚如何准确判断应用程序在 Instruments 中崩溃的位置。

我只需要弄清楚这块正在崩溃的内存指向的位置。使用LLDB或 Instruments 执行此操作的最佳方法是什么?

0 投票
2 回答
3001 浏览

ios - iOS模拟器中如何用lldb调用类方法?

我正在尝试调试 iOS 应用程序,但我在模拟器中遇到了 lldb 问题。调用类方法似乎不起作用。实例方法工作正常。

我试过 4.3 和 5.1 模拟器,但都出现了同样的问题。

在设备上调试时一切正常。

0 投票
1 回答
1245 浏览

ios - iOS:LLDB 多行断点命令无法按预期工作

我正在尝试在这里做一些花哨的事情,但文档建议它应该是可能的。也许 LLDB 仍然太新,但我遇到了很多调试器崩溃/死锁,即使没有发生这种情况,它似乎也没有像我预期的那样工作。

我正在尝试围绕所有选择器调用组合一个调试包装器,以在某个代码块中提取消息调用图。(如果您真的想知道,我可以解释为什么,但这与调试器问题并不真正相关。)

我从要开始跟踪事物的行上的 Xcode 断点开始(对于奖励积分,这发生在辅助线程上,但在你问之前,不,任何其他线程上都没有对此对象进行任何访问或其属性子图中的任何内容):

断点触发,我运行“bt”,只是为了提取:

然后我做了一些有点邪恶的事情:我在 objc_msgSend 中放了一个断点,就在它调用真实对象选择器的指令处。objc_msgSend 看起来像:

(实际上有两个 bx 调用,但让我们保持简单。)我运行:

(包括 TID 是因为我在跟踪这个线程时遇到了很多麻烦,而且我不需要无关的东西干扰。)

这是脚本的用武之地。上面描述的设置完全按照我的意愿工作。如果我恢复执行直到断点触发,我可以运行:

效果将是调试器:

  • 移动到 objc_msgSend 帧
  • 一步一步,将其推进到它所指向的对象选择器框架中
  • 显示相关详细信息(对象类型、调用的选择器)
  • 恢复执行

在这一点上,我可以一遍又一遍地粘贴这四个命令并复制输出,直到我讨厌自己。

另一方面,如果我运行:

并粘贴那些完全相同的命令,一切都会中断。它不会前进到对象选择器框架。它不显示帧细节,或者至少不显示正确的细节——取决于各种调整(见下文),它可能会或可能不会将“objc_msgSend”显示为当前函数。它不会恢复执行。

在这种情况下,如果我能让这个例子工作,我会很高兴。但为了获得更多奖励积分,我也尝试过使用 python,我更喜欢它,因为它允许更复杂的日志记录:

又不行了。同样取决于微小的细节,这可能会或可能不会打印一些东西(通常是 objc_msgSend),但它永远不会打印正确的东西。它永远不会将指令向前推进。之后它永远不会恢复执行。

再说一次,如果我手动操作,python 版本可以正常工作:如果我等到断点触发,然后运行“脚本”并输入完全相同的行,它会按预期工作。有些部分甚至可以单独工作,例如,如果我删除除获取进程并调用 process.Continue() 的部分之外的所有内容并自动触发这些部分,则“有效”(这意味着我看到 lldb 提示在暂停和恢复时快速闪烁执行。通常我会后悔,因为它很快就会变得无响应并崩溃。)

所以:有什么想法吗?是技术还没有准备好,还是我只是错过了一些可以解决所有问题的聪明拼图?还是我应该完全放弃并接受这样一个事实,即对象内部的某些部分我永远无法理解?...

0 投票
1 回答
1412 浏览

objective-c - 打印双类型结构成员时 LLDB 中的奇怪行为

在一些 iOS 代码中,我struct在一个对象上有一个 C ivar。该结构的成员之一是 type double。如果我在一个方法中分配给这个成员,当我打印它本身时struct调试器会报告这个成员的值的虚假值(就像变量的列表视图一样),但是当我直接打印成员时,(),我获得正确的价值。此外,如果我将此成员的值分配给本地自动var,我会在列表视图和打印时看到正确的值。structstructstructp structWithDouble.doubleMemberdouble

我想这是 LLDB 的一个问题,但它令人不安和沮丧。这是一个已知的问题?如果是这样,是否有解决方法?

例子

在内部someMethod:,调试器变量列表显示以下值:

在 LLDB 中,我在闯入时得到以下输出someMethod:

更新

我发现使用 GDB 时不会发生这种行为。显然 LLDB 还没有准备好……不过,我仍然对 LLDB 的解决方法感兴趣。

0 投票
3 回答
74978 浏览

xcode - 在 Xcode 中使用 LLDB 进行调试时如何更改变量值?

在 Xcode 中,GDB 允许您在调试时更改局部变量(请参阅如何在 XCode 中调试时更改 NSString 值?)。LLDB 是否提供类似的功能?如果是这样,我们如何使用它?

0 投票
3 回答
4654 浏览

ios5 - iOS应用程序崩溃没有错误,只是(lldb)

我的应用程序最近似乎随机崩溃,没有错误或异常。控制台仅以(lldb)浅蓝色显示。我有未捕获的异常处理,但仍然没有。它发生在随机时间。我可以一遍又一遍地做同样的任务,有时会发生,有时不会。有时它也会发生在应用程序中的随机位置。

到目前为止,我所读到的可能只是lldb调试器崩溃了,而不是我的应用程序崩溃了,但是我以前没有注意到它。

任何想法如何找出崩溃的原因是什么?

当我将 MBProgressHUD 添加到我的应用程序时,它似乎已经开始了。

0 投票
1 回答
800 浏览

objective-c - 试图在调试器中获取文本字段文本的 intValue

intValue为什么我不能在调试器中打印我的文本字段的文本?

0 投票
3 回答
9380 浏览

objective-c - Xcode 4.3 中带有 LLDB 的奇怪错误消息

我目前正在使用 Xcode 4.3.2 编写一个 iOS 应用程序。在我的大部分代码中,使用 LLDB 进行调试都可以正常工作。但是在某些时候,我在单步执行代码时收到一条奇怪的消息。当我将鼠标悬停在 iVar 上时,它会说

错误 [IRForTarget]:找不到 Objective-C 间接 ivar 符号 OBJC_IVAR_$_MyFancyClass.iVar

而不是向我展示价值。但是,在 中Variables View,我可以看到它就好了。直到我选择Print Description of ...那个,因为那时,Xcode 崩溃......当我使用 GDB 时,悬停工作但变量的类型和值是错误的。

我发现我的代码有问题,进而导致调试器失败。但是,代码运行良好。我很想提供一些示例代码,但课程相当长,我无法确定我搞砸的确切位置。那么有没有人遇到过类似的行为?

更新:实际上,这似乎发生在我的代码中的任何地方,而不仅仅是在某些特定文件中。如果有帮助,当 LLDB 显示上述消息时,GDB 总是显示拥有 iVar 的类的对象,而不是 iVar 本身。看起来好像内存管理有问题。例如,如果我说类似

即使我有选择器也会被调用

0 投票
2 回答
3252 浏览

objective-c - 应该如何在 iOS 中调试 SIGABRT?

iOS 模拟器正在发出一个归属于 main.m 的 SIGABRT 信号。

我很困惑,因为我没有更改 main.m。回溯调试器总是返回 main 函数,这对我没用。

如何在 iOS 中调试 SIGABRT 信号?我希望 XCode 可以让我知道我写的哪一行导致信号触发。

这是终止我的程序后控制台发出的问题。

我不太确定这意味着什么,或者它是否与 SIGABRT 的发行直接相关。

0 投票
1 回答
8368 浏览

ios - iOS模拟器应用程序的终端命令行调试?

是否可以从 Mac OS X 下的终端命令行使用 GDB 或 LLDB 来调试在 iOS 模拟器上运行的应用程序?(例如,不是来自 Xcode 的 GUI 或控制台,而是使用外部命令行或进程)。如果是这样,怎么做?