繁体   English   中英

一个简单的代码,不知道如何调试

[英]A simple code, don't know how to debug

在我的BNRItem.m中,我实现了一个类方法:

#import "BNRItem.h"

@implementation BNRItem

+ (instancetype) randomItem {

    // Create an immutable array of three adjectives
    NSArray *randomAdjectiveList = @[@"Fluffy", @"Rusty", @"Shiny"];

    //three nouns
    NSArray *randomNounList = @[@"Bear", @"Spork", @"Mac"];

    //random number for 0 to 2
    //NOTE: NSInteger is not an object, but a type definition for "long"
    NSInteger adjectiveIndex = arc4random() % [randomAdjectiveList count];
    NSInteger nounIndex = arc4random() % [randomNounList count];

    NSString *randomName = [NSString stringWithFormat:@"%@ %@",
                            randomAdjectiveList[adjectiveIndex],
                            randomNounList[nounIndex]];

    int randomValue = arc4random() % 100;

    NSString *randomSerialNumber = [NSString stringWithFormat:@"%c%c%c%c%c",
                                    '0' + arc4random() % 10,
                                    'A' + arc4random() % 26,
                                    '0' + arc4random() % 10,
                                    'A' + arc4random() % 26,
                                    '0' + arc4random() % 10];


    BNRItem *newItem = [[self alloc] initWithItenName:randomName
                                          valueInDollars:randomValue
                                            serialNumber:randomSerialNumber];

    return newItem;

}

@end

在main.m中,我尝试调用class方法来创建BNRItem的新实例:

#import <Foundation/Foundation.h>
#import "BNRItem.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableArray *items = [[NSMutableArray alloc] init];

        for (int i = 0; i < 10; i++) {
            //Thread 1: breakpoint 1.1
            BNRItem *item = [BNRItem randomItem];
            [items addObject:item];
        }

        for (BNRItem *item in items) {
            NSLog(@"%@", item);
        }

        //destroy the mutable array object
        items = nil;
    }
    return 0;
}

但是,当我运行我的应用程序时,遇到了以下我不理解如何调试的事情,没有错误消息,它只是在代码中显示了一个断点:

在此处输入图片说明

那么,我的代码有什么问题呢? 我该如何调试这种情况? 我的意思是,我不仅在寻找如何使当前代码运行的方法,还想知道如何在这种情况下进行调试? 因为控制台不会提供太多有关代码错误的信息。

您的应用程序在breakpoint打开的情况下运行。 您所需要做的就是单击蓝色符号(如下图所示),然后再次运行它。 该符号应变为白色。 那么您应该很好走!

在此处输入图片说明

正如其他人所说,您正在代码中遇到断点。 屏幕快照中第17行上的蓝色箭头是一个断点,并且它旁边有刻度线,并且右边距中的文字为“线程1:breapoint ...”的事实表明您已经击中了一个断点。

这是一个非常有用的调试工具。 您应该学习如何使用它。 单击另一行上的同一点会在该行上添加一个断点。 在运行程序时,如果执行了该行代码,调试器将在运行该行之前停止执行,并向您显示需要查看的变量的当前值(刚刚更改的变量以及局部变量)。

如果抓住一个蓝色的断点并将其拖走,它将删除它。 如果单击它,它将在活动和禁用之间切换。

还有一个调试器命令行,可让您输入调试器命令以显示变量的值(甚至执行代码)。

现在,只需将断点拖到远处即可将其删除,但请花一些时间来学习如何使用断点和调试器的其他功能。 的确,这是IDE最强大的功能之一,如果您要超越开发人员的初级阶段就必须学习如何做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM