2020年6月30日 作者 zeroheart

利用Arthas进行调试分析

https://arthas.gitee.io/

查看类的属性
sc -d -f com.yuqiaotech.scm.service.WarehouseIOServiceForStd

查看类的方法
sm com.yuqiaotech.scm.service.WarehouseIOServiceForStd

ognl ‘@com.yuqiaotech.scm.service.WarehouseIOServiceForStd@payNames’ //没成功

用下面的方法,可以成功
sc -d com.yuqiaotech.scm.service.WarehouseIOServiceForStd
把classloader的hash 复制下来 7166ac50
ognl -x 3 ‘@com.yuqiaotech.scm.service.WarehouseIOServiceForStd@payNames’ -c 7166ac50

//跟踪调用路径和时间
trace com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById
yqrpc(“warehouseIOServiceForStd.getWarehouseIOById”)(99453);

//5秒打印一次执行情况
monitor -c 5 com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById

//观察参数和返回值
watch com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById ‘{params[0],returnObj}’

// 查看入参和出参大小,如果返回的是set之类的
watch com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById ‘{params[0],returnObj.size}’

// 查看入参和出参中是否包含 ‘items’,如果返回的是set之类的
watch com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById ‘{params[0],returnObj.contains(“items”)}’

// 查看入参和出参,出参 toString
watch com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById ‘{params[0],returnObj.toString()}’

watch com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById ‘{params,returnObj,throwExp}’ -n 5 -x 3
watch com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById ‘{params,returnObj,throwExp}’ -x 3

watch com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById ‘target’
watch com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById ‘target.warehouseIOManager’

watch com.yuqiaotech.scm.webapp.action.WarehouseIOForStandardAction outJsonSaveStandard ‘target’
watch com.yuqiaotech.scm.webapp.action.WarehouseIOForStandardAction outJsonSaveStandard {‘target.warehouseIOJsonStr’,’target.warehouseIOItemsJsonStr’}

trace com.yuqiaotech.scm.webapp.action.WarehouseIOForStandardAction outJsonSaveStandard
watch net.sf.json.JSONObject optLong ‘{params,returnObj,throwExp}’ -x 3

//查看异常信息
stack com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById
yqrpc(“warehouseIOServiceForStd.getWarehouseIOById”)(-1);

tt -t com.yuqiaotech.scm.service.WarehouseIOServiceForStd getWarehouseIOById
tt -i 1001
tt -i 1001 -p 可以看到调用的参数