我希望能够从命令行触发Android堆转储。有相关命令吗?特别是从命令行,而不是通过Montior或DDMSGUI也许可以使用ddms或adb,例如ddms-head-dump还是adbshellheapdump?AFAICT监视器和ddms始终以GUI模式启动,并且adb没有堆转储命令。更新:我试过了,它看起来很有希望,但它不起作用:adbjdwpadbforwardtcp:8000jdwp:1234(用1代替1234的输出)jmap-dump:format=b,file=heapdump.hproflocalhost:8000但即使是堆摘要也失败了:jmap-heaplocalho
我一直在尝试诊断我正在编写的Android应用程序中的内存泄漏。我将堆转储加载到Eclipse中,但我看到的结果非常奇怪。堆中有大约20,000个异常实例(具体来说,来自UnboundIDLDAP库的LDAPException)没有入站引用。也就是说,它们出现在支配树的根部。OQLSELECTobjectseFROMcom.unboundid.ldap.sdk.LDAPExceptioneWHERE(inbounds(e).length=0)返回超过20,000个结果,总计几乎所有的堆。然而,GC在堆转储之前运行,我可以看到它在执行泄漏代码期间在控制台中反复运行。如果这些实例没有入站引
在我的应用程序中跟踪严重内存问题的过程中,我查看了我的应用程序中的几个堆转储,大多数时候我有一个我不知道的巨大位图。它需要9.4MB,或9,830,400字节,或者实际上是一个1280x1920图像,每个像素4个字节。我检查了EclipseMAT,它确实是一个字节[9830400],它有一个传入引用,它是一个android.graphics.Bitmap。我想将其转储到一个文件中并尝试查看它。我不明白它是从哪里来的。我所有可绘制对象中最大的图像是640x960png,占用空间不到3MB。我尝试使用Eclipse来“将值复制到文件”,但我认为它只是将缓冲区打印到文件,而且我不知道有什么图
阅读导航引言一、概念(1)基本概念(2)kill-l命令(察看系统定义的信号列表)二、产生信号(1)通过终端按键产生信号--信号产生--CoreDump(核心转储)(2)调用系统函数向进程发信号kill()函数abort()函数(3)由软件条件产生信号alarm()函数(4)硬件异常产生信号温馨提示引言在现代社会中,信号无处不在。我们的生活充满了各种各样的信号,它们指引着我们前进的方向,使我们能够了解周围环境的变化。正如在计算机编程中一样,Linux进程信号也是一种重要的信号,它们扮演着相似的角色。想象一下,在繁忙的城市街道上行驶,交通信号灯是我们最熟悉的信号之一。当红灯亮起时,我们知道需要停
有没有办法记录android中的用户操作。就像如果有人单击按钮或输入文本或滚动列表,如何识别这些操作并记录来自UI组件的数据?让我给出我的Intent的更多背景。有时在我的手动测试期间,会有一些所谓的难以重现的错误。有时我很难记住在错误发生之前我做了什么,尤其是在相当长的时间之后。所以我的一个想法是记录下在bug出现之前我做了什么。我想用一种轻松的方式,而不是记录屏幕,所以也许我们可以简单地转储用户操作和相应的UI控件的数据,这可以给我们一些线索来提醒我我做了什么以及输出了什么数据保存情况。有没有更好的方法解决难以重现的bug? 最佳答案
我正在检查内存,试图通过hprof转储查找最终的内存泄漏。我发现有时当我通过后退按钮离开Activity时(这将结束Activity),Activity仍会保留在内存中但它只有两个GC根,这似乎不是很“强”虽然。这是我的Activity流程/我点击和测试的方式:A、B、C是Activity。1)A->B->(回到)A2)执行hprof转储,结果如下:B仍在内存中,BActivity的GC根中唯一的元素是:com.myapp.android.activity.directory.Bcom.android.internal.policy.impl.PhoneLayoutInflater的m
我正在编写JNI应用程序。logcat表示日志文件存在data/log/dumpstate_app_native.txt还有系统墓碑中的东西。当我访问SamsungInfuse作为媒体设备时,我没有看到任何此类文件。事实上,我也没有看到我的应用程序数据文件吗?他们在哪里,我确实看到了其他应用程序包,但在数据周期下并不多。这是我在logcat中看到的内容:dumpstate/data/log/dumpstate_app_native.txt将/data/tombstones/tombstone_01复制到DropBox(SYSTEM_TOMBSTONE)将堆栈跟踪写入'/data/anr
如果抛出的异常将由特定的catchblock处理,是否有办法导致C++中的抛出在抛出点转储核心?当异常到达顶层时,我想要类似于g++所发生的事情。例如,我想要这样的东西:try{bar();try{foo();}catch(...){#pragmadump_at_throw_site}}catch(...){std::cerr这样,如果从foo()或其被调用者抛出的任何异常到达foo()的调用点,就会导致核心转储在抛出点,这样就可以看到是谁抛出的达到此级别的异常。另一方面,bar()抛出的异常将被正常处理。 最佳答案 是的,它可以在
我的应用程序主要是Java,但对于某些计算,使用C++库。我们的环境是在RedHat3(即将成为RedHat5)上运行的Java1.6。我的问题是C++库不是线程安全的。为了解决这个问题,我们运行多个单线程“工作”进程,并从同样用C++编写的中央工作管理器为它们分配工作。我们的Java应用程序通过第三方产品调用C++工作管理器。由于各种原因,我们想重写C++WorkManager和workers。我赞成全部用Java编写,在每个worker中使用JNI来调用C++库。主要问题是如果C++库核心转储会发生什么。不幸的是,这很常见,我们需要能够看到C++库中的哪一行导致了问题,例如通过检查
一、简介 今天是《Net高级调试》的第六篇文章。记得我刚接触Net框架的时候,还是挺有信心的,对所谓的值类型和引用类型也能说出自己的见解,毕竟,自己一直在努力。当然这些见解都是书本上的,并没有做到眼见为实,所以总是有些东西说不清楚。今天,我们就好好的说说C#的类型,是从内存级别、从底层来说一下值类型、引用类型到底是什么,它们在内存中的形态,还有也说说数组的内存形态,如何内部布局的,以及我们如何查找由未捕捉的异常引起的程序崩溃。这些都是基础的,如果这些掌握不好,以后的高级调试的道路,也不好走。自从我过了这一关,很多东西理解起来,比较透彻了,但是,还必须努力。当然了,第一次看视频或者看书,