ios – 如何设置Swift中有条件断点的条件与自我和枚举?

前端之家收集整理的这篇文章主要介绍了ios – 如何设置Swift中有条件断点的条件与自我和枚举?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个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

如果我删除自己,并将条件更改为:

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

解决方法

这显然是一个lldb bug.你没有提到你正在使用什么版本的工具.如果您没有使用6.3.1或更高版本,请再试一次.如果您仍然遇到问题,请提交 http://bugreporter.apple.com错误.

注意,框架var和expr是相当不同的野兽. frame var仅打印局部变量的值,直接使用DWARF调试信息,但不是表达式求值程序.所以,例如,它不够了解==.我想像如果你这样做:

(lldb) self.request.method == HTTPMethod.POST

当在那个断点停止时,你会看到相同的效果.

表达式解析器必须扮演一个额外的技巧,作为你的类的方法(通过自我等获得透明的引用),而且这是一个有点棘手的事情.显然我们没有在你的情况下正确地做这个工作.

原文链接:https://www.f2er.com/iOS/336936.html

猜你在找的iOS相关文章