繁体   English   中英

如何阅读Xcode 6.1 Instruments .trace文件?

How to read a Xcode 6.1 Instruments .trace file?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我一直在试图读取.trace文件,我已经使用自定义工具模板生成:使用(乐器的Automator, 分配泄漏仪器

我在这个stackoverflow答案中找到的最好的帮助。 基本上, 作者创建了一个自定义的Objective-C程序( Traced )来读取特定类型的Apples .trace文件(instrument: OpenGL ES Driver )。 他的回答是面向XCode 4.6

该代码仍适用于XCode 6.1 ,但跟踪文件似乎略有改变。 您必须在.trace包中找到*.run.zip文件并解压缩。 在解压缩的文件夹中,您现在必须找到*.run文件。 .trace包中有几个*.run.zip文件; 每个使用的仪器一个。

简单地运行Traced程序让我得到了一个uncaught exception 'NSArchiverArchiveInconsistency', reason: '*** class error for 'XRObjectAllocRun' - 错误。

这个错误最初很容易搞清楚。 我所要做的就是实现缺少的类XRObjectAllocRun ; XRRun的示例XRRunXRVideoCardRun并行

这是我走了多远,陷入困境的地方:

#import "XRObjectAllocRun.h"

@implementation XRObjectAllocRun
- (id)initWithCoder:(NSCoder *)decoder
{
    if((self = [super init]))
    {   
        NSObject *a = [decoder decodeObject];
        NSObject *b = [decoder decodeObject];
        NSObject *c = [decoder decodeObject];
        NSObject *d = [decoder decodeObject];
        NSObject *e = [decoder decodeObject];
        NSObject *f = [decoder decodeObject];
        NSObject *g = [decoder decodeObject];
        NSObject *h = [decoder decodeObject];
        NSObject *i = [decoder decodeObject];
//        NSObject *j = [decoder decodeObject];
//        NSObject *k = [decoder decodeObject];   
        NSLog(@"test");
    }
    return self;
}
@end

基本上我没有对XRObjectAllocRun类进行逆向工程 但无论我解码多少对象,我总会收到以下异常: uncaught exception 'NSArchiverArchiveInconsistency', reason: '*** NSUnarchiver: inconsistency between written and read data for object 0x100112750'

如果取消注释最后两个decode语句,程序将因此异常而崩溃: uncaught exception 'NSArchiverArchiveInconsistency', reason: '*** file inconsistency: read 'i', expecting '@''

有谁知道Apples XRObjectAllocRun类的签名? 此类用于分配工具。

任何帮助都会很棒!

更新

我玩Swift并翻译整个*.trace -reader - 它失败了完全相同的错误:

import Foundation
import Cocoa

@objc(XRObjectAllocRun)
class XRObjectAllocRun: NSObject {
    func initWithCoder(decoder:NSCoder){
        var x = decoder.decodeObject()
        // this is where things start breaking...
    }
}

@objc(XRRun)
class XRRun: NSObject {
    // to be implemented    
}

@objc(XRTrackSegment)
class XRTrackSegment: NSObject {
    func initWithCoder(decoder:NSCoder)->NSString{
        var a = decoder.decodeObject()?.integerValue
        var b = decoder.decodeObject()?.integerValue
        var c = decoder.decodeObject()?.integerValue
        var d = decoder.decodeObject()?.integerValue
        var e = decoder.decodeObject()

        return "test"
    }
}

@objc(PFTTrackSegment)
class PFTTrackSegment: NSObject {
    func initWithCoder(decoder:NSCoder){
        var a = decoder.decodeObject()?.integerValue
        var b = decoder.decodeObject()?.integerValue
        var c = decoder.decodeObject()?.integerValue
        var d = decoder.decodeObject()?.integerValue
        var e = decoder.decodeObject()?.integerValue
        var f = decoder.decodeObject()?.integerValue
    }
}

// parse command line
var traceFilePath = Process.arguments[1]
println("input: \(traceFilePath)")

var traceFile = NSURL(fileURLWithPath: traceFilePath)
var error:NSError?

// check if the file exists
if (traceFile?.checkResourceIsReachableAndReturnError(&error) == false){
    // file does not exist or cannot be accessed
    println("\(error)")
    exit(1)
}

var rawData = NSData(contentsOfURL: traceFile!)
var data = NSUnarchiver(forReadingWithData: rawData!)
var decodedObject: AnyObject? = data?.decodeObject()
println("\(decodedObject)")
2 个回复

这是XRObjectAllocRun类的签名

#import "XRRun.h"

#import "SymbolAwareRun.h"
#import "XRCallTreeDataSource.h"
#import "XRSourceQuery.h"

@class NSMutableArray, NSMutableDictionary, NSString, XRHeapGeneration, XROAEventSummary, XRObjectAllocRunSharedData;

@interface XRObjectAllocRun : XRRun <SymbolAwareRun, XRSourceQuery, XRCallTreeDataSource>
{
    XRObjectAllocRunSharedData *_sharedData;
    NSMutableArray *_allStats;
    NSMutableDictionary *_statsForCategory;
    NSMutableDictionary *_categoryIDForName;
    XROAEventSummary *_scaleStats;
    NSMutableArray *_generations;
    struct XRTimeRange _filterTimeRange;
    unsigned int _filterMinEventID;
    unsigned int _filterMaxEventID;
    unsigned long long _nextGenNumber;
    NSMutableDictionary *_samplesByCategoryNumber;
    unsigned long long _catNumIndex;
    struct XRTimeRange _currentStatsFilterRange;
    int _lifecycleFilter;
    int _allocationTypeFilter;
    unsigned int *_quickEventCacheIds;
    id *_quickEventCache;
    XRHeapGeneration *_activeGeneration;
}

+ (void)initialize;
- (id)operation:(id)arg1 commentsForSymbol:(id)arg2 inSourceManager:(id)arg3 callTreeInformation:(id)arg4;
- (id)provideCategories;
- (id)backtracesForCategory:(id)arg1 timeRange:(struct XRTimeRange)arg2 savedIndex:(unsigned long long *)arg3;
- (void)_configureCallTreeForAllocationType:(int)arg1;
- (id)symbolsForEvent:(id)arg1 reverseOrder:(BOOL)arg2;
- (id)backtraceRepository;
- (BOOL)eventIsLiveInCurrentTimeRange:(id)arg1;
- (unsigned int)uncategorizedCount;
- (unsigned int)countOfObjectEventsForCategory:(unsigned int)arg1;
- (void)enumerateObjectEventsForCategory:(unsigned int)arg1 skipToIndex:(unsigned int)arg2 withBlock:(CDUnknownBlockType)arg3;
- (BOOL)_applyLifecycleFilterToEvent:(id)arg1;
- (id)zombieEvent;
- (id)eventForIdentifier:(unsigned int)arg1;
- (BOOL)loadDTPerformanceSessionDataFromPaths:(id)arg1 error:(id *)arg2;
- (void)updateGenerations;
- (void)deleteGeneration:(id)arg1;
- (void)moveGeneration:(id)arg1 toTime:(unsigned long long)arg2;
- (void)setActiveGeneration:(id)arg1;
- (id)generationAtTime:(unsigned long long)arg1;
- (id)generations;
- (id)nextGenerationIdentifier;
- (void)createGenerationAtTime:(unsigned long long)arg1;
- (void)removeFlag:(id)arg1;
- (struct XRTimeRange)_displayTimeFilter;
- (BOOL)_isTimeScoped;
- (BOOL)useTypeFilteringRules:(id)arg1;
- (void)setAllocationTypeFilter:(int)arg1;
- (void)setLifecycleFilter:(int)arg1;
- (struct XRTimeRange)selectedTimeRange;
- (void)setSelectedTimeRange:(struct XRTimeRange)arg1;
- (id)categoryNameForIdentifier:(unsigned int)arg1;
- (id)globalStats;
- (id)scalingStats;
- (void)_clearStats;
- (void)allowEventReuse;
- (void)refreshStatsForActiveTimeFilter;
- (void)_updateStatsWithEventIdentifier:(unsigned int)arg1 category:(unsigned int)arg2 type:(unsigned int)arg3 size:(int)arg4 pastEvent:(unsigned int)arg5 summaryMap:(id *)arg6 maxCat:(unsigned int)arg7;
- (id)_statsObjectForCategoryID:(unsigned int)arg1;
- (void)_changeStatsByTimestampRange:(struct XRTimeRange)arg1 overallRange:(struct XRTimeRange)arg2 startID:(unsigned int)arg3 endID:(unsigned int)arg4;
- (id *)_createCategorySummaryMapWithMaximum:(unsigned int)arg1;
- (void)_validateGlobalStatsForTimeRange:(struct XRTimeRange)arg1;
- (void)_recomputeGlobalStats;
- (BOOL)discardsLifeCycleComplete;
- (unsigned long long)lastTimestamp;
- (id)sharedData;
- (void)setRecordMode:(int)arg1;
- (void)setDiscardsLifeCycleComplete:(BOOL)arg1;
- (void)setTargetDevice:(id)arg1 pid:(int)arg2 repository:(id)arg3;
- (id)initWithCoder:(id)arg1;
- (void)encodeWithCoder:(id)arg1;
- (void)dealloc;
- (id)init;

// Remaining properties
@property(readonly, copy) NSString *debugDescription;
@property(readonly, copy) NSString *description;
@property(readonly) unsigned long long hash;
@property(readonly) Class superclass;

@end

如果你需要,我已经在这里上传了其他课程的签名。

您可以简单地将存档中的标头导入到桥接标头,而不是在Swift中声明所需的类。

我做到了。 是git项目。

1 如何从Instruments工具解析.trace文件

我正在尝试将“每秒核心动画帧”日志导入csv或excel文件中,以便能够对其进行绘制并从我的代码中对其进行访问以实现自动化。 有人可以让我知道如何从.trace文件提取此数据并导出到csv文件吗? ...

2 Instruments .trace文件问题

当我从SVN检查测试脚本(我的朋友提交的文件)时,我不知道为什么脚本不可编辑,播放脚本和停止脚本选项被禁用,录制根本没有发生。 当我创建一个新的自动化项目时导入相同的脚本文件然后它正常工作。 可能是其他人提交的.trace文件无效的原因是什么? 可能的解决方案是什么? ...

3 带有Instruments 6.1的Xcode 6.1无法正常工作

我在使用Instruments时遇到了一个奇怪的问题。 当我尝试对应用程序进行概要分析时,它会卡在界面上并且变得无响应。 如果不与Instruments一起运行,则同一应用程序可以在Simulator和Device上完美运行。 还有其他人遇到这个问题吗? 解决方法是什么? 附加 ...

4 如何阅读Xcode的Instruments对象关系图?

在Xcode中发现内存泄漏的过程中,我得到了一些图表,但我不明白它们的含义。 他们是UML ...吗? 在哪里可以找到有关它们的信息...? 例如, 此图是什么意思...? 有的是红线,有的是蓝色,为什么? 提前致谢。 ...

5 Xcode 6.1 Instruments - 启动时崩溃

无论项目或构建设置如何,仪器在启动时都会不断崩溃。 我已经尝试删除并重新安装xcode,包括新的beta版本。 我已经清理了derivedData文件夹,还有我能找到的其他xCode痕迹。 我也尝试修复我的磁盘权限并执行一般清理。 崩溃报告如下所示:流程:工具[3362]路径:/Ap ...

7 XCode 7 Instruments-为什么会泄漏?

我陷入一个奇怪的事情:为什么以下代码片段会产生泄漏(attrDefault没有发布)? (假设之前已经定义了“字体”,并且self.text引用了NSString *): 任何想法? 更新: 令人惊讶的是,如果将相同的代码嵌入到@autoreleasepool语句中,则泄漏 ...

8 Xcode 6.1中的.pch文件

我四处张望,找不到解决此问题的方法。 问题涉及到将头文件添加到xcode 6.1项目。 我想要做的是添加一个头文件,该头文件会自动导入到我创建的每个文件中。 即 我创造啊与我 已包含previousMade.pch或previousMade.h定义的位置。 我已经 ...

9 无法从XCode 6.1导出IPA文件

我浪费了一天尝试使用开发配置文件导出IPA文件。 我是18个月以来的开发人员。 它不是我不知道出口IPA的东西。 我真的很讨厌Apple开发人员改变我们以前导出简单IPA的方式。 我已经出口了数百次,但这次我没有运气。 我认为导出成功的IPA需要什么才能在系统中提供这些东西 ...

10 Xcode的Debug Navigator是否与Instruments分配不同?

我正试图在我的应用程序中找到内存问题。 当我使用Xcode的调试导航器来解决内存问题时,我发现应用程序的整体使用率有所增加。 对于特定的流程,当我来回走动时,我看不到内存持续存在。 然而,如果我使用Allocations进行相同的流程和仪器,我确实看到3Mbs每次来回都会持续存在。 ...

暂无
暂无

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

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