- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
特别是print
命令通常(80-90% 的失败率)不起作用
我已经验证过:
https://developer.apple.com/library/content/qa/qa1947/_index.html
示例 1
(lldb) p prevMsg
(lldb) p activeNetworkRequests
Util.log("Returning \(key) from file cache", [.Caches])
08:03:11.201 v2.0.64d other TwoStageCache.swift objectForKey(_:completion:)[95]: Returning https://example.server.com/Storage/Retrieve?FileName=accounts/person@domain.com/resource/47a58660-26d1-11e7-8e7f-c9f4cd679b03.html from file cache
key
的值是可以的)
(lldb) fr var key
(URL) key = unable to read data
(lldb) print key
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x1d787583).
The process has been returned to the state before expression evaluation.
(lldb) expression --unwind-on-error=0 -- key
libobjc.A.dylib`objc_retain:
0x22562b0 <+0>: pushl %ebp
0x22562b1 <+1>: movl %esp, %ebp
0x22562b3 <+3>: subl $0x8, %esp
0x22562b6 <+6>: calll 0x22562bb ; <+11>
0x22562bb <+11>: popl %ecx
0x22562bc <+12>: movl 0x8(%ebp), %eax
0x22562bf <+15>: testl %eax, %eax
0x22562c1 <+17>: je 0x22562e1 ; <+49>
0x22562c3 <+19>: movl (%eax), %edx
-> 0x22562c5 <+21>: testb $0x2, 0x10(%edx)
1 $__lldb_expr(UnsafeMutablePointer<Any>) -> ()
2 Beta Viewer`@objc AppDelegate.init() -> AppDelegate:
3 sharedEnchantment`partial apply for TwoStageCache.(objectForKey(URL, completion : (imgData : Data?, err : BBError?) -> ()) -> ()).(closure #1)
4 sharedEnchantment`thunk:
最佳答案
提前为这篇文章感到抱歉,但希望这些信息值得一读……
lldb 有两种查看变量的方式(*):print
和 frame variable
.print
并不是真正主要用于打印变量 - 这只是它真正作用的副作用。 print
是 expression
的别名这让您更了解它是什么:一个完整的表达式评估器,它运行您在代码中停止的位置传递的表达式。
它构建了一个上下文来模拟当前 pc 上的代码(包括类/协议(protocol)上下文),然后获取您传递给它的代码片段,在该上下文中编译它,JIT 是结果,将 JIT 代码插入到您所在的进程中调试并运行它。这是非常强大的 - 您可以更改值,在程序中调用函数,引入新函数、新类型等。但是也有很多机制只是为了让它运行,而且这些机制中的一些很难做到正确.frame variable
只能打印当前帧中的局部变量和参数(使用 -g
标志,它还可以打印全局变量和静态变量)。它不能调用函数或任何其他花哨的东西 print
可以做。它确实理解变量访问语法的有限子集,因此:
(lldb) 框架变量 foo.bar.baz
将工作。但在幕后,它需要做的就是读取调试信息以找到变量、它的类型以及它在内存中的位置,然后它可以从该信息中提取值。因此,它所做的工作更快、更健壮——这是人们通常要求的工作的很大一部分print
去做。
请注意,您可以通过 frame variable
为您访问的变量获得“对象打印”。通过使用 -O
标志,它支持与 print
相同的结果格式选项。 .对于上下文,Xcode“Locals” View 大致相当于调用 frame variable
.
我倾向于使用 frame variable
用于简单的本地打印,但即使您喜欢使用一个命令满足您的所有需求 - 这将是 print
- 很高兴知道如果 print
有回退由于某种原因失败。
回到你的例子......
示例 1:其中一件事 print
在 Swift 中所做的是将所有可见的局部变量引入到表达式的上下文中,因此它们可用于您的代码。示例 1 中的错误是因为无法实现其中一个局部变量 - 也许它是协议(protocol)一致性指定的唯一变量,我们无法弄清楚它到底是什么 - 所以我们未能构建上下文,这意味着解析或 JIT 步骤失败。 print
代码对此类故障进行预扫描并忽略失败的本地人,但您发现了此扫描未命中的情况。frame variable
也可能无法打印 runOnce
但由于它不依赖于当前上下文,因此无法执行此操作不会影响您打印其他变量的能力。
如果您可以重现此问题,即使您无法向我们提供该项目,我们通常也可以从 lldb 的调试日志中找出发生了什么。因此,将调试 session 驱动到打印将失败的程度,然后执行以下操作:
(lldb) log enable -f /tmp/lldb-log.txt lldb expr types
info locals
比。
print
...
关于swift - LLDB 无法检查变量(在 Xcode 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43783834/
我需要根据需要动态设置文本区域,但它不想正常工作。 JQuery 会自行检查,但无法检查是否已检查。但是当您在第二个单选框内单击时,始终需要文本区域。我尝试了很多次让它工作,但它仍然有问题。我添加了“
我需要在 Django 中进行 API 调用(某种形式),作为我们所需的自定义身份验证系统的一部分。用户名和密码通过 SSL 发送到特定 URL(对这些参数使用 GET),响应应该是 HTTP 200
我将在我的可移植 C 代码中使用 #warning 来生成编译时警告。但并非所有平台都支持 #warning。有什么方法可以找到该平台是否支持 #warning。 #ifdef warning
我编写了一个函数来检查某个数字是否存在于某个区间内。停止搜索的最佳方法是什么?这个: for (i = a; i <= b; i++) { fi = f(i); if (fi == c) {
我想知道在 c 中是否有一种方法可以检查,例如在 for 函数中,如果变量等于或不等于某些字符,而不必每次都重复进行相等性检查。如果我没记错的话,以这种方式检查相等性是不正确的: if (a == (
我有如下日志功能 void log_error(char * file_name, int line_num, int err_code) { printf("%s:%d:%s\n", fil
使用 ssh-keygen 生成的 key 对在 macOS 上可以有不同的格式。 macOS 可读的标准 PEM ASN.1 对象 SecKey API 带有文本标题的 PEM OpenSSH ke
我正在尝试编写一个 excel if 语句。我不熟悉使用 Excel 具有的所有额外功能。我正在使用一个名为 importXML() 的函数.我正在尝试检查我正在使用的函数是否生成“#VALUE!”错
有没有办法检查是否没有 AIO 写入给定文件?我在我的 Unix 类(class)上制作了一个项目,该项目将是一个上下文无关(基于 UDP)的国际象棋服务器,并且所有数据都必须存储在文件中。应用程序将
我有一个如下所示的函数: public Status execute() { Status status = doSomething(); if (status != Stat
我正在使用 Composer,我不希望 PhpStorm 在 vendor 文件夹上运行任何错误检查或检查,因为它对 vendor/中的某些代码显示误报composer/autoload_static
Chapel 的一个很好的特性是它区分了数组的域和它的分布。检查两个数组是否具有相同的域和分布(通常想要的)的最佳方法是什么? 我能看到的最好的方法是检查 D1==D2和 D1.dist==D2.di
在我的 JavaScript 函数中,我为所有输入、文本区域和选择字段提供实际值作为 initial_value: $('input, textarea, select').each(function
我正在编写一个分解为几个简单函数的 PHP 类。在构造函数中,它调用另一个名为 processFile 的函数。该函数调用 5 个私有(private)函数并进行检查。如果检查失败,它会将消息分配给
这个问题已经有答案了: How to detect if user it trying to open a link in a new tab? (2 个回答) 已关闭 7 年前。 我认为 JavaS
我正在浏览我们的代码库并看到很多这样的测试: declare @row_id int = ... declare @row_attribute string select @row_attribu
我正在声明一个用作比较的函数。我的问题是: 为什么条件充当语句? 为什么第 4 行可以工作,而第 5 行却不行? 我知道这段代码不切实际且未使用,但为什么编译器允许这种语法? 谷歌没有找到答案。但话又
到目前为止,我有一个带有空文本字段的 PHP Kontaktform,并使用以下命令检查了所需的字段: $name = check_input($_POST['name'], "请输入姓名。"); 现
目前,我能想到的合理检查的唯一方法没有臃肿的逻辑: if ( $value > 0 ) { // Okay } else { // Not Okay } 有没有更好的办法? 最佳答案
我正在尝试运行一个脚本,如果 i 存在(意味着存在 i 值,任何值)或其他部分,我希望运行其中的一部分如果i没有值就运行,有人可以启发我吗? 我说的是 for 循环,比如 for (var i=0;
我是一名优秀的程序员,十分优秀!