我一直在试图读取.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)")

#1楼 票数:1 已采纳

这是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中声明所需的类。

#2楼 票数:0

我做到了。 是git项目。

  ask by Marco Pashkov translate from so

未解决问题?本站智能推荐:

3回复

XCode/Instruments没有显示内存泄漏

我正在关注斯坦福iOS开发讲座,我有一个计算器大脑类,它在控制器中已经是alloc init但我还没有在dealloc release它。 我从XCode运行 - >运行与性能工具,应用程序启动,没有泄漏出现,然后我点击iOS模拟器中的主页按钮,没有任何东西,然后我双击主页按钮,关闭应
1回复

XCode&Instruments,如何清除流程列表

我正在调试一个iPad应用程序,并且在选择“仪器”中的“选择目标”下拉列表时,我将获得一个GIGANTIC附加进程列表。 它实际上显示了我在启动和停止我正在调试的应用程序时运行和终止的每个进程。 它们列在Attach To Process-> System部分下,这是我要调试的IOS
1回复

泄漏永远不会在Xcode6.1.1Instruments工具中显示

类似于此Q ,我试图在不断发出内存警告的应用程序中查找泄漏,但是即使我故意将一些泄漏作为此类健全性检查,例如: 在XCode 6.1.1中使用“泄漏”配置文件时,“工具”的“泄漏”部分中什么都不会显示。 我觉得我缺少“启用”泄漏检测的基础知识。 请帮忙!
1回复

分析时Instruments.app崩溃

当我尝试在设备上进行配置文件时,Instruments.app崩溃。 它在模拟器中工作正常。 所有仪器都会发生这种情况,包括时间分析器,泄漏等。我能够使用能量诊断仪。 我试过了: 确保将应用设置为调试模式(也尝试使用发布模式) 重新安装xcode 重新启动设备/计算机
4回复

使用Instruments测试iOS应用程序开发的最佳实践

我想知道提供给客户的专业应用程序是如何优雅,流畅,少或没有应用程序崩溃。 因为我总是看到问题主要是关于内存泄漏,NSZombie还是表现还不够好。 我认为使用Instruments Tool解决一些问题很棒。 但我只是熟悉内存泄漏和僵尸模板。 当然,我认为还有其他有趣的工具可以更好地跟
1回复

设置UIImageView的图片属性时,Instruments使应用程序崩溃

我在乐器方面遇到了麻烦。 我的应用程序运行正常,没有崩溃,但是我想用Instruments检查内存泄漏。 唯一的问题是,Instruments会使应用程序每次都在同一地点崩溃-没有Instruments绝不会崩溃。 我已查明了导致应用程序崩溃的确切行。 当我注释掉时,该应用程序不会崩溃
2回复

Xcode中的MemoryLeaksProfiler-它的可靠性如何?

我尝试在xCode中使用内存探查器。 它将许多对象标记为泄漏的对象,但是当我打开对象的历史记录时,对该对象的最后一个操作是将对象引用的计数设置为零的版本。 该工具显示的结果有多可靠? 它们是潜在的内存泄漏还是已确认的泄漏? 如果绝对是内存泄漏,为什么当我的最后一个引用计数为零时会发
2回复

Xcode调试/仪器:查看对象的所有指针

我刚刚开始研究一个相对复杂的项目,并发现了一个bug。 当用户注销时,视图控制器仍然分配在登录视图控制器后面。 他们继续响应旋转事件等。我在注销时将控制器设置为nil ,但它仍然响应,这表明其他一些对象仍然有一个指向它的指针。 (此项目已启用ARC。) 预ARC我可以通过覆盖retai