java用命令行绘图_从命令行创建java项目的可视化调用图

它看起来像Call Graph产生相当不错的输出.我们来做一个快速的PoC.

我将使用Call Graph开发人员提供的示例输出.

org.apache.batik.dom.AbstractParentNode:appendChild org.apache.batik.dom.AbstractParentNode:fireDOMNodeInsertedEvent 6270

org.apache.batik.dom.AbstractParentNode:fireDOMNodeInsertedEvent org.apache.batik.dom.AbstractDocument:getEventsEnabled 6280

org.apache.batik.dom.AbstractParentNode:checkAndRemove org.apache.batik.dom.AbstractNode:getOwnerDocument 6280

org.apache.batik.dom.util.DoublyIndexedTable:put org.apache.batik.dom.util.DoublyIndexedTable$Entry:DoublyIndexedTable$Entry 6682

org.apache.batik.dom.util.DoublyIndexedTable:put org.apache.batik.dom.util.DoublyIndexedTable:hashCode 6693

org.apache.batik.dom.AbstractElement:invalidateElementsByTagName org.apache.batik.dom.AbstractElement:getNodeType 7198

org.apache.batik.dom.AbstractElement:invalidateElementsByTagName org.apache.batik.dom.AbstractDocument:getElementsByTagName 14396

org.apache.batik.dom.AbstractElement:invalidateElementsByTagName org.apache.batik.dom.AbstractDocument:getElementsByTagNameNS 28792

有几种图形渲染引擎可用.最简单的可能是DOT(请查看链接,还有其他几个很好的工具列出).

为了使用DOT,我需要转换一些数据.假设我想保留ClassName:methodName和skip package.

它是超级容易,你可以使用任何工具来做到这一点,但我会使用sed:

OUT=callgraph.dot

echo "graph test {" > $OUT

sed -E 's/[a-z]+\.//g; s/[0-9]+\/;/; s/ / -- /; s/[\$|\:]/_/g' callgraph.txt >> $OUT

echo "}" >> $OUT

dot -Tpng callgraph.dot -o callgraph.png

这里是生成结果:

graph test {

AbstractParentNode_appendChild -- AbstractParentNode_fireDOMNodeInsertedEvent ;

AbstractParentNode_fireDOMNodeInsertedEvent -- AbstractDocument_getEventsEnabled ;

AbstractParentNode_checkAndRemove -- AbstractNode_getOwnerDocument ;

DoublyIndexedTable_put -- DoublyIndexedTable_Entry_DoublyIndexedTable_Entry ;

DoublyIndexedTable_put -- DoublyIndexedTable_hashCode ;

AbstractElement_invalidateElementsByTagName -- AbstractElement_getNodeType ;

AbstractElement_invalidateElementsByTagName -- AbstractDocument_getElementsByTagName ;

AbstractElement_invalidateElementsByTagName -- AbstractDocument_getElementsByTagNameNS ;

}

DOT可以将其转化为以下内容:

从初始数据中提取所有图形:

请注意,您可以根据需要调整渲染. DOT是graphviz的一部分,这是一套非常灵活的工具.

答案背后有一个总体思路:

>使用任何合适的工具生成跟踪

找到一个很好的渲染解决方案

花一些时间来获得简单的自动转换

BTW,看看canviz

Canviz is a JavaScript library for drawing Graphviz graphs to a web

browser canvas. More technically, Canviz is a JavaScript xdot

renderer. It works in most modern browsers.

快乐编码:)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值