这儿用于沉淀Scala相关交流的内容, 包括但不限:
- 通过新建一个 分享
issue
, 发起待分享的议题, 正文需简要说明分享内容或议程 - 通过指派明确分享人, 可以是发起人自己, 可以邀请他人来分享
- 通过评论来对议题进行反馈, 建议, 以或者投票
TODO
HouseMD is an awesome diagnosing tool better than BTrace
Home Page: http://csug.github.io/HouseMD/
License: Apache License 2.0
D:\JAVA>java -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar -jar housemd-assembly-0.2.1.jar
ERROR: Missing parameter: pid
Missing parameter: pid
D:\JAVA>java -Xbootclasspath/a:$JAVA_HOME/lib/tools.jar -jar housemd-assembly-0.2.1.jar 2020
ERROR: java.lang.NoClassDefFoundError: com/sun/tools/attach/VirtualMachine
ERROR: You can get more details in /tmp/housemd.err.2020
java.io.FileNotFoundException: \tmp\housemd.err.2020 (系统找不到指定的路径。)
D:\JAVA>java -version
java version "1.6.0_27"
Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
Java HotSpot(TM) Client VM (build 20.2-b06, mixed mode, sharing)
Duck ClassLoader is concrete of URLClassLoader which load agent classes from agent.jar , loaded jdk classes from parent loader, but other external classes could not found.
housemd> env USER
USER = zhongl
housemd> env -e T.*
TERM = xterm-256color
TERM_PROGRAM = iTerm.app
TMPDIR = /var/folders/x_/n4gqqgcj35q7lxf0849g9fsh0000gn/T/
Instrumentation.appendToBootstrapClassLoaderSearch(JarFile)
List all declared methods when type Tab
after dot, like TraceTarget.
would list:
main addOne
All interface
and abstract class
can be used to tracing it's concrete.
Unlike tracing normal class, the method filter you input supposed to be (interface
or abstract class
)simple name with a plus, like InterfaceSimpleName+
.
In method filter auto-completion list, all the interfaces and abstract classes will show the simple name with a plus at the end, like this:
housemd> trace TraceTarget
TraceTarget TraceTarget$A TraceTarget$B TraceTarget$C+ TraceTarget$CL TraceTarget$D+
Most ClassNotFound problem cause by customized ClassLoader(eg: OSGI), or ...
http://kenai.com/projects/btrace/forums/tips-tricks/topics/7221-BTrace-with-OSGI
| method full name | class loader | this object | invoked | avg elapse|
TraceTarget.addOne(int) sun.misc.Launcher$AppClassLoader@1cde100 null 2 34ms
[apple@dennis-mc700 ~/bin]$ housemd
ERROR: Missing parameter: pid
Missing parameter: pid
似乎不够友好,打印help菜单更好一点。
例如支持通配符:
loaded com.taobao.*Test
可以通过字符串的相似度计算或者转化为正则匹配来支持
例如help敲h就够了,trace敲t就够了,类似gdb。
Just keep line format without new line in screen.
ERROR: com.sun.tools.attach.AgentLoadException: Agent JAR not found or no Agent-Class attribute
Clojure是JVM上的一个语言,但是用HouseMD来调试Clojure代码的话,需要知道Clojure的实现细节: http://www.blogjava.net/killme2008/archive/2012/06/15/380822.html, 如果能够原生支持Clojure那就太好了。可以作为一个单独的命令?或者如果觉得不是核心功能,是否可以作为一个插件插进来?
| date | time | elapse | thread name |this | method full name | arguemnt(s) |result or exception
2012-06-07 14:30:57 67ms [main] TraceTarget$A@88931 TraceTarget$A.m [0] void
借宝地再讨论一个问题,我们维护的应用因为某些原因会导致perm区慢慢变大,主要的原因是定义类变多,或调用了 String.intern
(在 JDK6
及以前会将 String
在perm区也定义一份),但要查这样的问题不容易,如果是定义类我们可以打开 -verbose:class
或使用 BTrace
跟踪 ClassLoader.defineClass
,但 BTrace
无法跟踪 String.intern
,我猜应该和 intern
是 native
方法有关,所以我使用了一种曲线救国的方式,先通过 ASM
写的一个程序把所有调用 String.intern
的类和方法全部找出来,再对这些方法用 BTrace
跟踪,这样的确能解决这个问题,不知道你有什么想法?
还有个问题我发现 HouseMD
过滤了系统的一些类的跟踪,但 BTrace
可以,而且很实用,不知道这个是出于什么考虑?
再PS一个问题,如在跟踪 String.intern
的问题的时候,我会对怀疑的多个类或方法加 BTrace
跟踪,但我发现 HouseMD
一次只能跟踪一个方法,在解决我上面那一例问题的时候会很不方便。
Some overrided toString contain \n
or too long to mass the output line.
在rt.jar(或classes.jar)中,包含其它的一个JDK系统中的类有很多不是以java, sun 或 com.sun开始的,也有很多org.w3c开始的,和其它的类;我之前在做单元测试框架的时候也使用过自定义的ClassLoader,最后的解决方法是先遍历了一遍JDK自己的jar包加载到内存,通过hashset判断才解决这个问题,不过这个方法比较耗内存。
但下面判断方法有点欠妥:
if (name.startsWith("java") || name.startsWith("sun") || name.startsWith("com.sun"))
https://github.com/zhongl/HouseMD/blob/master/src/main/scala/com/github/zhongl/housemd/Duck.java
trace某个方法的时候,当该方法执行时,housemd就直接退出了,没有任何日志或异常信息。
不知道哪里出了问题,trace其他方法都正常,就是有一个方法每次都这样。
如果有debug或verbose也许能知道哪里出错了。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.