plaintext
Copy code
java -XX:ErrorFile=/tmp/java_error%!p(MISSING).log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:+CrashOnOutOfMemoryError -XX:OnOutOfMemoryError="gcore %!p(MISSING)kill -9 %!p(MISSING)" YourJavaProgram
其中,-XX:ErrorFile用于指定JVM错误日志的保存路径,-XX:+HeapDumpOnOutOfMemoryError用于在发生内存溢出时生成堆转储文件,-XX:HeapDumpPath用于指定堆转储文件的保存路径,-XX:+CrashOnOutOfMemoryError用于在发生内存溢出时直接崩溃,-XX:OnOutOfMemoryError用于在发生内存溢出时执行指定的命令。在这个例子中,我们使用gcore命令生成core文件,并将进程杀掉。
在生成了core文件之后,你可以使用gdb来分析core文件。首先,你需要使用以下命令启动gdb:
plaintext
Copy code
gdb YourJavaProgram core
其中,YourJavaProgram是你的Java程序的可执行文件名,core是你生成的core文件名。启动gdb后,你可以使用gdb命令来分析core文件,例如,可以使用bt命令来查看堆栈信息,使用info命令来查看线程信息等等。
需要注意的是,在使用gdb分析core文件时,你需要了解Java程序的内部实现,例如,你需要知道Java线程是如何映射到 *** 作系统线程的,以及Java对象是如何映射到内存中的。否则,你可能无法正确地分析core文件,或者分析结果可能不准确。
最基本的 *** 作是:1, 首先在一个java文件中设断点,然后运行,当程序走到断点处就会转到debug视图下,
2, F5键与F6键均为单步调试,F5是step into,也就是进入本行代码中执行,F6是step over,
也就是执行本行代码,跳到下一行,
3,F7是跳出函数
4,F8是执行到最后。
1.Step Into (also F5) 跳入
2.Step Over (also F6) 跳过
3.Step Return (also F7) 执行完当前method,然后return跳出此method
4.step Filter 逐步过滤 一直执行直到遇到未经过滤的位置或断点(设置Filter:window-preferences-java-Debug-step Filtering)
5.resume 重新开始执行debug,一直运行直到遇到breakpoint
6.hit count 设置执行次数 适合程序中的for循环(设置 breakpoint view-右键hit count)
7.inspect 检查 运算。执行一个表达式显示执行值
8.watch 实时地监视变量的变化
9.我们常说的断点(breakpoints)是指line breakpoints,除了line
breakpoints,还有其他的断点类型:field(watchpoint)breakpoint,method
breakpoint,exception breakpoint.
10.field breakpoint 也叫watchpoint(监视点) 当成员变量被读取或修改时暂挂
11.添加method breakpoint 进入/离开此方法时暂挂(Run-method breakpoint)
12.添加Exception breakpoint 捕抓到Execption时暂挂(待续...)断点属性:
1.hit count 执行多少次数后暂挂 用于循环
2.enable condition 遇到符合你输入条件(为ture\改变时)就暂挂
3.suspend thread 多线程时暂挂此线程
4.suspend VM 暂挂虚拟机
13.variables 视图里的变量可以改变变量值,在variables 视图选择变量点击右键--change value.一次来进行快速调试。
14.debug 过程中修改了某些code后--〉save&build--resume--重新暂挂于断点
1.debug。断点调试。2.输出消息。system.out.println();来调试。
3.动态代理(Dynamic Proxy)。动态代理是一个特定的Java特性,它允许开发者引入proxy类,加进某一给定类之前,并通过某一给定接口截获所有调用。你可以在很短时间内用一个普通代理设置一个虚拟事件处理器,来查看事件发生顺序。当需要理解事件处理器时这是最简单和快捷的方法。
4.运行时剖析器(Run-time Profiler)。剖析器是通过特定的JVM hooks在系统中跟踪所有调用的强大工具。但是用它来跟踪执行过程是大才小用。
5.Aspects。面向方面编程。它是截获你的代码执行既快速又容易的方法。你可以围绕方法、构造器、属性访问等等有选择地设置hook,而不需要修改原始代码。在这些hook中,你可以打印调试消息。
1.2常用的。3.4.5网上找的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)