2

LLDB 在打印 double 类型的结构字段时存在各种问题,如下所述: 奇怪的行为-in-lldb-when-printing-a-double-type-struct-member

在我自己的情况下,我尝试打印 CLLocationCoordinate2D 类型的结构。从 Xcode 4.5.2 开始,打印 CLLocationCoordinate2D 的错误仍然存​​在。

寻找解决此错误的方法,我在此博客中遇到了一个不错的宏 LOG_EXPR:http: //vgable.com/blog/2010/08/19/the-most-useful-objective-c-code-ive-ever -书面/

它在将类型记录到调试器方面做得很好,但不能从调试器中调用。

有没有人想出一种方法来在 LLDB 命令行界面中调试时执行 LOG_EXPR 之类的操作,或者任何其他改进的打印可以从命令行处理任意结构,而不是切换回 GDB?

这是我输入 LLDB 时发生的情况:

(lldb) p (CLLocationCoordinate2D)[self mapSetPointLatLon]
(CLLocationCoordinate2D) $4 = {
  (CLLocationDegrees) latitude = 42.4604
  (CLLocationDegrees) longitude = 42.4604
  (double) easting = 42.4604
  (double) northing = -71.5179
}

注意 lldb 添加的多余和错误的行。

当我将 LOG_EXPR 编译到我的代码中时,会发生以下情况(在同一断点处):

Line of Code (not debugger):

 LOG_EXPR(self.mapSetPointLatLon);

produces the correct output in the debugger output:
  2013-01-26 14:02:17.555 S6E11[79116:c07] self.mapSetPointLatLon = {latitude=42.4604,longitude=-71.5179}

如果我尝试从命令行调用 LOG_EXPR 在同一断点处,会发生以下情况:

(lldb) expr LOG_EXPR(self.mapSetPointLatLon);
error: use of undeclared identifier 'LOG_EXPR'
error: 1 errors parsing expression
(lldb) 

这是另一个示例,因为事实证明,您可以让调试器做正确的事情。

这是我的代码片段,我在其中分配了 2 种方式的结构:

CLLocationCoordinate2D defloc = CLLocationCoordinate2DMake(kStartingLat, kStartingLon);
[[self.verticalPagingViewController mapPagingViewController] setMapSetPointLatLon: defloc];

如果我只是打印它的工作变量。

(lldb) p defloc
(CLLocationCoordinate2D) $1 = {
  (CLLocationDegrees) latitude = 42.4604
  (CLLocationDegrees) longitude = -71.5179
}

如果我正在转换访问器方法的返回值的类型,它会失败。

(lldb) p (CLLocationCoordinate2D)[[self.verticalPagingViewController mapPagingViewController] mapSetPointLatLon]
(CLLocationCoordinate2D) $2 = {
  (CLLocationDegrees) latitude = 0
  (CLLocationDegrees) longitude = 0
  (double) easting = 0
  (double) northing = 0
}
4

0 回答 0