Ruby 分享一个自制 gem: VistualCall 一个生成调用图谱的 gem

Mark24 · 2023年04月24日 · 最后由 Mark24 回复于 2023年04月25日 · 907 次阅读

做一个可视化追踪调用的 gem,比较粗糙,分享下。

项目地址:https://github.com/Mark24Code/vistual_call


VistualCall

VistualCall is a gem to help you trace your code and export beautiful vistual call graph.

Introduction

Dependency

  1. Graphviz

You need to install Graphviz by yourself.

Go to install graphviz.

Usage

1. Install gem

gem install vistual_call

2. Only the method needs to be wrapped.

require 'vistual_call'

def call_c
end

def call_b
  call_c
end

def call_a
  call_b
end

VistualCall.trace do
  call_a # enter call
end

The method after each node is call order number. This will help your understand the order of the function call.

Sinatra

3. More information

configuration

# you can pass options
VistualCall.trace(options) do
  # run your code here...
end

Options:

name type required explain example
label String true 标题 Hello
labelloc Symbol false 标题位置: :top :bottom :center :top
labeljust Symbol false 标题对齐位置 :left, :center, :right :center
direction Symbol false 绘制方向,依次是 :TB(从上到下),:LR(从左到右,默认方式),:BT(从下到上),:RL(从右到左) :LR
format String false 输出图片格式,查看 graphviz 支持输出格式 'png','svg' 默认 'png'
output String false 导出图片绝对路径 默认家目录下 vistual_call_result.png
theme Symbol false 配色主题 :sky, :lemon 默认 :sky
show_dot boolean false 展示 dot 内容 默认 false
show_order_number boolean false 输出调用序号 默认 true
jump_list Array(String) false 跳过节点,默认 ["Kernel#class", "Kernel#frozen?"] -
heightlight_match Regex false 默认高亮匹配 label,默认 /method_missing/ /method_missing/

LICENSE

The gem is available as open source under the terms of the MIT License.

用 vistual_call 分析 vistual_call 自己

require_relative "vistual_call"

def call_a
end

VistualCall.trace(title: "Outer", show_dot: true) do
  VistualCall.trace(title: "Inner", show_dot: true) do
    call_a # whatever
  end
end

cool 会遇到循环依赖的情况吗?

steve 回复

不会。因为不是根据词法分析的,是运行时分析。如果出现循环调用的程序,你自己的程序死循环,爆栈退出,那么 trace 本身也会被退出。不会获得最后的图谱。

为什么有蜘蛛网

hooopo 回复

基本方法被反复调用。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号