标签: instruments

iOS libsystem_c.dylib strdup内存泄漏NSZombie无法正常工作

请帮我跟踪iOS内存泄漏.谢谢!

我正在使用xCode 4.0.1,我尝试激活NSZombie来跟踪内存泄漏,但它似乎不像以前一样工作,使用xCode 3.x

我无法找到内存泄漏的来源,因为Instruments指出了这一点:

泄露的对象 - > GeneralBlock-32 地址 - > 0x4c8600 大小 - > 32字节 负责的库 - > libsystem_c.dylib 负责的框架/调用者 - > strup

此时我不知道如果我正在使用带有NSZombie的Instruments与xCode 4正确的方式,因为当我点击"i"获取更多信息时,它没有显示NSZombie选项,在左侧选项Leaks下.

观察:我的iPhone应用程序播放实时流mms/wma以及wma udioudio文件的时间有限.只有有限的wma文件才会发生泄漏,但是当我从流式源播放时没有结束时间,它会完美运行.

memory-leaks objective-c instruments nszombie ios

8
推荐指数
2
解决办法
1万
查看次数

块捕获对象的过度释放问题; 保持计数从+2直接跳到0!

我对偶然发生的碰撞感到困惑,根据Zombies乐器的说法,这是由于一些字典值的过度释放造成的.当我查看Instruments中这些过度释放的对象之一的对象历史时,我发现它的保留计数在一个阶段从+2直接下降到0.(看一下帖子末尾的截图).我不清楚这是怎么可能的.

我应该说在使用Instruments进行分析时我只看到这种崩溃,所以我认为它可能是一个Apple漏洞,但是假设它是导航错误可能更安全,而Instruments只是暴露出来.

无论如何,我正在构建一个包含一些Core Foundation对象(CFStrings和CFNumbers)的CFDictionary,然后我将它转换为NSDictionary*并将其传递给Objective-C方法.我的代码的简化版本如下:

// creates a CFDictionary containing some CFStrings and CFNumbers
void doStuff() 
{
    CFDictionaryRef myDict = CreateMyDictionaryContainingCFTypes();

    dispatch_async(myQueue, ^{
        [someObject receiveDictionary:(NSDictionary*)myDict];
        CFRelease(myDict);  // this line causes a crash. The Zombies instrument
                            // claims a CFString value contained in this
                            // dictionary has already been freed.
    });
}

// ...

- (void)receiveDictionary:(NSDictionary*)dict
{
    NSAutoreleasePool *pool = [NSAutoreleasePool new];

    NSString* str1 = [dict objectForKey:@"key1"];
    NSString* str2 = [dict objectForKey:@"key2"];
    NSNumber* num1 = [dict objectForKey:@"key3"];

    dispatch_async(myOtherQueue, ^{
        [database executeUpdate:@"INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

objective-c instruments nszombie grand-central-dispatch retaincount

8
推荐指数
1
解决办法
1208
查看次数

是否可以在启用断点的情况下使用XCode的仪器?

我正在尝试优化iOS应用程序的内存使用量,我想看看应用程序的总内存使用量在代码中的特定点.我以为我应该能够设置断点,使用Activity Monitor配置应用程序,并查看每个断点捕获时的内存使用情况.但是当我运行Instruments时,似乎断点不再停止执行,因此很难确切知道内存使用何时发生变化.

是否可以同时使用断点和仪器?如果没有,是否有一种聪明的方法可以编写一些代码,以便在特定事件发生时将标记插入到仪器时间轴中?

xcode breakpoints instruments ios

8
推荐指数
1
解决办法
3691
查看次数

iOS开发:有没有办法在不使用乐器的情况下从命令提示符下读取.trace文件

我正在尝试为我的应用程序进行一些性能测试,并希望监视其某些指标,特别是cpu使用情况.我想让这个过程完全自动化.我能够创建.trace文件,并正在寻找一种解决方案,以从跟踪文件中获取有意义的信息.我想在非监狱破坏的设备上这样做,所以使用top也是不可行的

感谢您以自动方式在非监狱设备上查找CPU使用情况的任何指示.

-Kshitiz

testing automation instruments ios

8
推荐指数
1
解决办法
955
查看次数

iOS和Objective-C:大部分CPU时间花在[NSObject release]和[NSObject retain]上但是类方法没有做任何内存操作

图像处理应用程序在模拟器上快速运行,但在真实设备(iPhone 4GS)上运行速度非常慢.

在"instruments"下运行应用程序时,我看到以下调用树:

在此输入图像描述

请注意,报告红色圆圈内的调用几乎占用了该方法的所有CPU时间.

有问题的方法是类方法(不是实例方法),具有以下代码:

@implementation Line2F

+ (CGFloat)signTested:(Point2F *)tested p1:(Point2F *)p1 p2:(Point2F *)p2
{
    return [Line2F signTestedX:tested.x testedY:tested.y
                           p1x:p1.x p1y:p1.y
                           p2x:p2.x p2y:p2.y];
}

+ (CGFloat)signTestedX:(CGFloat)testedX testedY:(CGFloat)testedY
                   p1x:(CGFloat)p1x p1y:(CGFloat)p1y
                   p2x:(CGFloat)p2x p2y:(CGFloat)p2y
{
  return (testedX - p2x) * (p1y - p2y) - (p1x - p2x) * (testedY - p2y);  
}

@end
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么大部分的CPU时间花在[NSObject release][NSObject retain]

profiling memory-management objective-c instruments ios

8
推荐指数
1
解决办法
539
查看次数

核心动画色彩混合层是否有用或者说是否有必要?

颜色混合层 打开仪器并选择位于iOS/Graphics下的Core Animation模板.首先,单击Core Animation工具的时间轴以显示底部窗格,然后找到标有"Debug Options"的部分.选中"颜色混合图层"框,它将在混合的图层上显示红色叠加,并在未混合的图层上显示绿色叠加.

核心动画色彩混合层是否有用或者说是否有必要? 我发现系统UI是红色混合的.我的应用程序在某些方面也是红色混合的.

我该怎么办?

提前致谢.

core-animation instruments ios

8
推荐指数
2
解决办法
5654
查看次数

UIAutomation - WebKit线程违规 - 从辅助线程初始使用WebKit

从命令行运行UIAutomation我经常得到:

WebKit Threading Violation - initial use of WebKit from a secondary thread.
Run Code Online (Sandbox Code Playgroud)

注意,我正在使用-w旗帜,它在开头.这个答案没有帮助:WebKit Threading Violation - 在UI Automation中从辅助线程初始使用WebKit

任何想法如何避免?

====更新

只是让仪器不打印出来这将是有用的.

webkit instruments ui-automation

8
推荐指数
0
解决办法
1541
查看次数

Profiler中的Alocation仪器未显示应用程序级别类

我遇到了使用Xcode 6.3 Beta 3的问题,其中Profiler没有在分配列表中显示任何自定义应用程序类:

在此输入图像描述

我有多个包含单词Post的类,但它们都没有显示在分配摘要中,即使它们肯定显示在屏幕上.

我在Profiler中运行时将App目标设置为使用调试模式,因此我不确定导致此问题的原因.

在分配列表中搜索时,我可以看到我正在寻找的类所执行的分配,但没有跟踪类本身的分配历史记录:

在此输入图像描述

知道哪个设置可能有问题?

profiler xcode instruments ios xcode-instruments

8
推荐指数
1
解决办法
370
查看次数

时间分析器在Xcode中缺少记录设置,显示设置

我使用的是仪器8.3.2,检查器窗口中缺少"记录设置和显示设置"选项卡.如何获取这些标签?请参阅随附的屏幕截图.

仪器Xcode 8

普通检查员窗口如下所示(参见箭头5):

仪器Xcode 7

xcode instruments ios xcode-instruments xcode8

8
推荐指数
1
解决办法
597
查看次数

XCode仪器中SCNNode上SCNAudioPlayer的持久性

我创建了一个子类SCNNode.它由很少的子节点组成.我已经宣布了一种方法,即.soundCasual()这会SCNAudioPlayer为此类的实例添加一个.当调用此方法时,一切都按预期工作并播放音频.无论何时轻敲该节点(手势),都会在该节点上调用此方法.

码:

class MyNode: SCNNode {
    let wrapperNode = SCNNode()
    let audioSource5 = SCNAudioSource(fileNamed: "audiofile.mp3")

    override init() {
        super.init()

        if let virtualScene = SCNScene(named: "MyNode.scn", inDirectory: "Assets.scnassets/Shapes/MyNode") {
            for child in virtualScene.rootNode.childNodes {
                wrapperNode.addChildNode(child)
            }
        }
    }

   func soundCasual() {
        DispatchQueue.global(qos: .userInteractive).async { [weak self] in
            if let audioSource = self?.audioSource5 {
                let audioPlayer = SCNAudioPlayer(source: audioSource)
                self?.wrapperNode.removeAllAudioPlayers()
                self?.wrapperNode.addAudioPlayer(audioPlayer)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

仪器内的问题(分配)

当我分析我的整个代码库(这是其他几件事)时,我看到每当我点击该节点时,SCNAudioPlayer的分配计数在Instruments内进行分析时增加1.但所有的增长都是持久的.根据定义SCNAudioPlayer,我假设玩家在播放后被移除,这就是为什么增量应该在瞬态分配中,但它不是这样工作的.这就是为什么我removeAllAudioPlayers()在向节点添加SCNAudioPlayer之前尝试过,正如您在代码中看到的那样soundCasual() …

instruments ios swift scnnode

8
推荐指数
1
解决办法
286
查看次数