Skip to content
This repository has been archived by the owner on Mar 14, 2019. It is now read-only.
BlackNiuza edited this page Aug 28, 2012 · 14 revisions

SimpleName是指什么?

Class.getName()结果中除去包名的部分, 例如java.lang.StringSimpleNameString.

我想知道一个类的来源文件路径?

执行 loaded SimpleName 的结果中 -> 右侧的路径就是此类加载的来源.

loaded命令支持SimpleName自动提示或补全吗?

支持, 键入你期望提示的SimpleName的首字母, 再键入Tab则会罗列全部SimpleName的候选列表.

若列表过长则会显示列表的总数, 并询问你是否要查看, 键入y查看, 键入n取消.

若列表只有一个时, SimpleName会自动补全.

我想知道一个类是被哪些类加载器加载过?

执行 loaded -h SimpleName 的结果中, 从第二行显示的是第一行类的类加载器, 第二行之后的每一行显示的是上一行的父类加载器.

我想知道一个方法在一段时间内是否被调用过?

假定一段时间是30 秒, 从开始时间起, 执行 trace -t 30 SimpleName.methodName 的结果实时摘要中, 每行的第三列数字表明了调用的次数.

若不指定-t, 则默认为10秒;

默认情况下, 每行显示的间隔时间为1秒钟;

其余列的含义, 请见使用指南.

更多选项, 请执行help trace

我想知道怎么改变trace实时摘要的显示间隔时间?

假定要指定的间隔时间为3秒, 执行 trace -i 3 SimpleName.methodName, 则实时摘要会每隔3秒显示一行最新的信息.

更多选项, 请执行help trace.

我指定-t1000秒, 为什么时间还未到就结束了, 其中有提示Ended by overlimit?

trace在设计上为了尽可能减少对正在运行的java进程影响, 设定了-t-l两个选项来限制一次trace的周期. 出现上述情况, 是因为-l的默认值1000的条件已经达成, 导致trace过程自动结束. 若一定要trace足够长的时间, 请调整一个合适-l选项的值.

强烈建议trace的周期越短越好;

更多选项, 请执行help trace.

SimpleName存在重名, 我想用包名来做过滤, 怎么做?

假定要过滤以com.example开头的包名, 则执行 trace -p com\.example.* SimpleName.methodName, 其结果会将只会显示以com.example开头包名下的SimpleName的方法调用信息.

-p的值为正则表达式;

更多选项, 请执行help trace.

我查看方法调用更详细的信息, 怎么做?

执行trace命令时, 增加-d选项, 如trace -d SimpleName.methodName. 之后更详细的信息会输出到一个文件(这文件的路径请通过执行help trace, 查看-d选项的说明中获知), 其中每行各列的含义说明请见使用指南

我想知道一个方法被哪些方法调用过, 怎么做?

执行trace命令时, 增加-s选项, 如trace -s SimpleName.methodName. 之后方法调用栈的信息会输出到一个文件(这文件的路径请通过执行help trace, 查看-s选项的说明中获知)

我想知道一个类所有方法的调用情况, 怎么做?

执行trace是仅键入SimpleName就可以了, 如trace Simplename.

Trace命令中SimpleName支持自动提示补全吗?

支持, 和loaded命令一样.

Trace命令中methodName支持自动补全吗?

支持, 在键入SimpleName.之后, 键入Tab会提示所有此类声明的方法(包括public/protected/default/private可见的方法, 但v0.2.1后不含继承下来的方法)

我只知道方法名, 不知道SimpleName, 怎么办?

trace不支持模糊SimpleName的匹配, 相信知道SimpleName不是一件难事:)

我想通过接口来trace, 可以吗?

v0.2.1后可以, 假定你要trace Runnable, 则执行trace Runnable+.run, 则所有 直接 实现Runnable接口的实现类的run方法都将被trace.

注意, 间接实现不包含在内, 如C -> B -> A, 要通过Atrace的话, C不会包含在内;

SimpleName的自动提示列表中, 为接口的SimpleName末尾都有一个+标识.

我想通过抽象类来trace, 可以吗?

v0.2.1后可以, 和接口一样, 执行trace SimpleName+.methodName.

注意, 若指定方法不是抽象的(abstract), 则此方法会被trace, 当其直接子类也覆写(override)此方法, 覆写的方法也将被trace

我想区分重载的方法, 可以吗?

呃, 在trace命令中无法区分, 但在实时现实的结果中会现实方法的参数列表, 这里是可以区分的.

Unable to open socket file: target process not responding or HotSpot VM not loaded

访问权限受限导致无法attach目标进程, 请使用启动目标进程的账户再次尝试.

即使用户不变,在VirtualBox的共享目录下执行houseMD依然出现同样问题,请把houseMD和目标程序迁移到非共享目录再次尝试.

Invalid or corrupt jarfile /home/admin/housemd/housemd.jar

网络问题导致jar下载得不完整, 请尝试重新下载.

在Windows的SecureCRT中, HouseMD键入回退(Backspace)无响应

在 Windows下, 使用SecureCRT是请确保终端类型是Linux, 即菜单Options -> Session Options -> Terminal -> Emulation -> Terminal 的选项是Linux.