4

我试图弄清楚如何在调试时关闭 Xcode 中的反汇编视图。我只想继续浏览我的代码,而不是在查看所有汇编代码时走神。我相信在调试菜单下的以前版本的 Xcode 中有一个选项,但我在 Xcode 4.5(最新版本)中找不到任何选项。有任何想法吗?

编辑:

我仔细检查以确保我实际上是在我自己的代码中而不是在库中,当我在我自己的代码中时它仍然会这样做。这是发生了什么的图片:

http://i1238.photobucket.com/albums/ff487/davidohyer/ScreenShot2012-10-02at35031PM.png

这只是通过创建一个新项目、创建一个虚拟函数、从 viewDidLoad 调用该虚拟函数、在函数调用上设置断点并使用 F6 单步执行来实现的。有任何想法吗?没有使用外部库。我确认您提到的选项在发生这种情况时已关闭。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self initVals];
}

-(void)initVals
{
    self.img = [[UIImageView alloc] init];
}
4

1 回答 1

3

产品 > 调试工作流程 > 调试时显示反汇编

在此处输入图像描述

请记住,您只能看到自己的代码。在某些库或框架内发生的断点和/或崩溃只会显示程序集,因为有简单的源代码可以显示。

编辑

您在编辑中显示的反汇编来自UIViewController. 您可以在侧边栏中看到它,也可以在反汇编的符号存根注释中看到它。

你可能会破坏你自己的代码,但是,如果你从这里开始,你将在一些框架代码中致命地结束。

在您的示例中,您从子类中断initVals呼叫。viewDidLoadUIViewController

如果你一步一步通过了这个结尾,你将以UIViewController代码结束,因为它还有很多事情要做viewDidLoad

所以要恢复,请注意侧边栏上的符号名称。在这里,它只是表明您不在子类中,而是在某些超类方法实现中。因此,程序集仅输出。

编辑 2

想象一下来自库(仅限二进制)的以下代码:

@interface Foo: NSObject

- ( void )test1;
- ( void )test2;
- ( void )test3;

@end

然后你将它子类化:

@interface Bar: Foo

@end

现在,Foo执行以下操作:

- ( void )test1
{
    [ self test2 ];
    [ self test3 ];
}

在您的子类中,假设您只覆盖test2

- ( void )test2
{
    ...

    /* Breakpoint here, at the end */
}

如果你从断点开始,你将在超类实现中结束,它在fromtest3之后被调用。test2test1

因此,您只需从自己的代码跳转到超类实现。再一次,没有人类可读的代码显示,而只有汇编。

于 2012-10-02T20:53:10.393 回答