嗨:在iPhone应用程序中,我使用一个库(C++),它在计算完成时异步进行回调.现在我想测量花费的时间 - 包括调用库的方法 - 直到进行回调.有没有可能使用Apple的Instruments应用程序执行此操作?什么是最佳做法?
我几天前发布了这个问题,但它非常混乱,我的问题不是很清楚所以我删除了它.我一直在挖掘,内存泄漏仍然存在.希望这种尝试更加清晰.
首先,我运行静态分析器,它报告没有内存泄漏.
然后我运行了仪器,它指出了这行代码中的内存泄漏.据我所知,没有内存泄漏.
featured=[[UILabel alloc]initWithFrame:CGRectMake(130,15, 200, 15)];
//[featured setFont:[UIFont UIFontboldSystemFontOfSize:20]];
featured.font = [UIFont boldSystemFontOfSize:20];
featured.backgroundColor= [UIColor clearColor];
featured.textColor=[UIColor blackColor];
featured.text= @"Featured Promo";
[self.view addSubview:featured];
[featured release];
featured=nil;
Run Code Online (Sandbox Code Playgroud)
如果我注释掉上面的代码,仪器报告另一个代码块中的另一个内存泄漏,其中没有可识别的泄漏.
UIButton *populartbutton = [[UIButton buttonWithType:UIButtonTypeRoundedRect]];
populartbutton.frame = CGRectMake(112, 145, 90, 22); // size and position of button
[populartbutton setTitle:@"Popular" forState:UIControlStateNormal];
populartbutton.backgroundColor = [UIColor clearColor];
populartbutton.adjustsImageWhenHighlighted = YES;
[populartbutton addTarget:self action:@selector(getpopular:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:populartbutton];
Run Code Online (Sandbox Code Playgroud)
仪器也说
负责任的图书馆=核心图形
负责任的框架= open_handle_to_dylib_path
这是堆栈跟踪.
53 Promo start
52 Promo main /Users/..2/main.m:14
51 UIKit UIApplicationMain
50 UIKit -[UIApplication _run] …
Run Code Online (Sandbox Code Playgroud) 很难解释我在主题行中需要什么.如果您有更好的想法,请随时编辑它.
问题如下:
iOS应用程序一次只能处理一个文档.每次关闭文档并打开一个新文档,即使它是相同的文档,内存使用量也会不断增加,并且总是以相同的数量增加.
所以有泄漏.代码不会释放(释放)某些东西.也许它是一个数组,它添加对文档项的引用,并且永远不会被清除,尽管它应该.
当然,泄漏工具在这里没有帮助,因为它都是"正确的"(它只能找到没有所有者的分配).
我如何使用Instruments(或dtrace)现在找到这个bugger?如果我可以简单地在仪器中识别其中一个未添加的对象,那将会有所帮助,其余的将很容易.
到目前为止,我一直在使用Allocations工具,将检查范围设置为旧文档关闭和新文档打开时的时间.尽管如此,这显示了数以千计的对象,其中只有一个是从前一个文档遗留下来的对象,尽管它不应该仍然存在.我需要识别的那个对象.
我想我需要的是Allocations工具中的一个功能,它减去刚刚添加的所有分配,并且还减去启动后存在的所有分配 - 剩下的是由新文档创建但从那时起未发布的项目.有没有办法获取收集的对象集合,将它们分组并设置这样的操作?可能不是.
每次打开文档时都会创建大约20000个对象,并且涉及大约50个源文件,通过查看源代码或手动检查所有对象是不可行的.
哦,静态分析仪也无济于事.
我正在开展一个需要极度关注内存的项目.我在仪器上运行模拟并显示下一次泄漏:
泄露对象:NSCFString
大小:80字节
负责图书馆:基础
负责框架:NSPlaceHolderString
我搜遍了我的所有代码,并没有明确地创建一个NSCFString.
提前致谢.
我可以使用命令行为单个设备/模拟器运行仪器,但我需要在两个设备上运行它.手动我可以通过打开两个新的仪器窗口并制作两个js副本并导入它来实现这一点.但我需要使用命令行来实现这一目标.任何人都可以帮助我实现这个目标,还是有人有相同的指导方针?
有没有办法以编程方式启动/停止仪器分析?我只需要以可靠的方式分析我的 OS X 代码的特定部分,但我似乎无法找到任何有关 Instruments 的文档,这些文档可能会告诉我如何做到这一点。对于 CHUD/Shark,有一个编程 API 和一个命令行工具来支持这一点,但我在任何地方都看不到 Instruments 的等效项?FWIW 我发现 2009 年左右的一些旧论坛帖子哀叹该领域缺乏 Instruments 功能,但最近没有。
我正在尝试使用自动化仪器和分配工具来分析我们的iOS应用程序的内存使用情况.我们的想法是使用自动化来驱动用例,而分配工具则在后台记录一些内存数据.我想知道是否可以同时使用仪器启动自动化和分配tracetemplate?这样我就可以在自动化完成后检查Allocations记录的数据.
任何指针都会有所帮助.
我将我的Xcode从6.2更新到6.3,现在仪器不再工作了,它正在请求一个模板,无论选择哪一个都无关紧要,它无法打开它.
它发生在iPhone 6+上的iOS 8.2和模拟器(ios 8.2和8.3)上.
更新我还将我的手机更新到iOS 8.3并尝试使用Xcode 6.4Beta,我仍然遇到同样的问题.
我在 Xcode 中有一个应用程序,还有单元测试。当我运行我的单元测试(项目 - > 测试)时,我在控制台中收到以下错误。
malloc: *** error for object 0x600000490e50: Invalid pointer dequeued from free list
*** set a breakpoint in malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)
我知道我的应用程序中存在内存管理错误,我正在努力解决这个问题。但是问题来了:
我知道如何使用仪器运行我的应用程序,即打开仪器并选择模拟器然后安装应用程序。但是我找不到在仪器中运行单元测试的方法。我试图将我的单元测试添加到方案中,但它似乎不起作用。
希望有人能帮我解决这个问题。请注意,我并不是在寻求有关如何解决此 malloc 错误的帮助,相反,我只是想找出一种使用仪器工具运行单元测试的方法。然后我可以自己处理错误。
提前致谢。
instruments ×10
ios ×4
iphone ×4
xcode ×4
memory-leaks ×3
objective-c ×2
c++ ×1
foundation ×1
macos ×1
memory ×1
performance ×1
profiling ×1
swift ×1
unit-testing ×1
xctest ×1