我有一个HTTP方法的枚举:
enum HTTPMethod: String {
case GET = "GET"
case POST = "POST"
}
我有一个请求类和一个请求包装类:
class Request {
let method: HTTPMethod = .GET
}
class RequestWrapper {
let request: Request
func compareToRequest(incomingRequest: NSURLRequest) -> Bool {
// Next line is where the conditional breakpoint set.
return request.method.rawValue == incomingRequest.HTTPMethod
}
}
我在行上设置了一个条件断点:
return request.method.rawValue == incomingRequest.HTTPMethod
条件:
self.request.method == HTTPMethod.POST
然后调试器在该行停止并显示错误消息:
Stopped due to an error evaluating condition of breakpoint 1.1:
"self.request.method == HTTPMethod.POST"
Couldn't parse conditional expression:
<EXPR>:1:1: error: use of unresolved identifier 'self'
self.request.HTTPMethod == HTTPMethod.POST
如果我删除self
并将条件更改为:
request.method == HTTPMethod.POST
错误信息如下:
Stopped due to an error evaluating condition of breakpoint 1.1:
"request.method == HTTPMethod.POST"
Couldn't parse conditional expression:
<EXPR>:1:1: error: could not find member 'method'
request.method == HTTPMethod.POST
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有没有办法解决这个问题?
更新
它可以使用LLDB命令检查self.request.method
的值:
fr v self.request.method
如果我使用局部常量来存储值,调试器可以在正确的位置停止:
// Use a local constant to store the HTTP method
let method = request.method
// Condition of breakpoint
method == HTTPMethod.POST
更新2:
我正在使用Xcode 6.3.1
答案 0 :(得分:2)
这显然是一个lldb错误。您没有提到您正在使用的工具版本。如果您没有使用6.3.1或更高版本,请再试一次。如果您仍然遇到问题,请提交http://bugreporter.apple.com的错误。
注意,frame var
和expr
是完全不同的野兽。 frame var
仅使用DWARF调试信息直接打印局部变量的值,但不是表达式求值程序。因此,例如,它不够了解==
。我想如果你这样做了:
(lldb) self.request.method == HTTPMethod.POST
当在该断点处停止时,您会看到相同的效果。
表达式解析器必须发挥作为你的类的方法冒充的额外技巧(通过自我等工作获得透明引用),并且这样做有点棘手。显然我们没有正确地完成你的工作。