Arthas watch (方法执行数据观测)

在这里插入图片描述

文章目录

  • 二、命令列表
    • 2.3 monitor/watch/trace/stack/tt 相关
      • 2.3.5 watch (方法执行数据观测)
        • 举例1:监控方法
        • 举例2:同时观察函数调用前和函数返回后

二、命令列表

2.3 monitor/watch/trace/stack/tt 相关

2.3.5 watch (方法执行数据观测)

提示

函数执行数据观测

让你能方便的观察到指定函数的调用情况。能观察到的范围为:返回值抛出异常入参,通过编写 OGNL 表达式进行对应变量的查看。

参数说明:

参数名称参数说明
class-pattern类名表达式匹配
method-pattern函数名表达式匹配
express观察表达式,默认值:{params, target, returnObj}
condition-express条件表达式
[b]函数调用之前观察
[e]函数异常之后观察
[s]函数返回之后观察
[f]函数结束之后(正常返回和异常返回)观察
[E]开启正则表达式匹配,默认为通配符匹配
[x:]指定输出结果的属性遍历深度,默认为 1,最大值是 4
[m <arg>]指定 Class 最大匹配数量,默认值为 50。长格式为[maxMatch <arg>]

特别说明:

  • watch 命令定义了 4 个观察事件点,即 -b 函数调用前,-e 函数异常后,-s 函数返回后,-f 函数结束后
  • 4 个观察事件点 -b-e-s 默认关闭,-f 默认打开,当指定观察点被打开后,在相应事件点会对观察表达式进行求值并输出
  • 这里要注意函数入参函数出参的区别,有可能在中间被修改导致前后不一致,除了 -b 事件点 params 代表函数入参外,其余事件都代表函数出参
  • 当使用 -b 时,由于观察事件点是在函数调用前,此时返回值或异常均不存在
  • 在 watch 命令的结果里,会打印出location信息。location有三种可能值:AtEnterAtExitAtExceptionExit。对应函数入口,函数正常 return,函数抛出异常。
举例1:监控方法

基础语法

watch 全路径类名 方法名 {params,returnObj,throwExp} -x 8

[arthas@7265]$ watch com.hero.lte.ems.security.service.impl.LdapService login {params,returnObj,throwExp} -x 8
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 237 ms, listenerId: 7
ts=2024-09-19 14:15:42; [cost=10.802626ms] result=@ArrayList[@Object[][@LdapLoginRequest[username=@String[testuser2],password=@String[Hero@1993],principal=@String[testuser2@MS-DCS.BEE.VIMPELCOM.RU],keytabFilePath=null,ldapFlag=null,domainName=@String[ms-dcs.bee.vimpelcom.ru],baseDn=@String[dc=ms-dcs,dc=bee,dc=vimpelcom,dc=ru],adminBindDn=@String[cn=Tech_Hytera_MS,ou=TechDir_Msk,ou=Moscow,dc=ms-dcs,dc=bee,dc=vimpelcom,dc=ru],adminBindPassword=@String[Bingo@1993],userSearchDn=@String[],userSearchScope=@Integer[2],userIdAttribute=@String[sAMAccountName],groupSearchDn=@String[DC=ms-dcs,DC=bee,DC=vimpelcom,DC=ru],groupSearchScope=@Integer[2],groupFilter=@String[(objectClass=*)],groupMemberAttribute=@String[member],createTime=@Date[2024-09-17 16:20:38,000],updateTime=@Date[2024-09-17 16:20:38,000],ldapConnectionSecurityMode=@Integer[0],port=@Integer[636],ignoreReferrals=@Integer[0],enableFullDnForGroupMemberAttribute=@Integer[0],validGroup=@String[testou1,APP_Hytera_MS],searchGroupFilter=@String[(&(objectClass=*)(member=*))],],],@ResultSet[errorCode=@String[43],errorString=@String[kerberos authentication failed.],errorParams=null,resultVal=null,],null,
]
举例2:同时观察函数调用前和函数返回后

基础语法

watch 全路径类名 方法名 {params,returnObj,throwExp} -x 8 -b -s

代码:请求前传入ouValues参数,方法返回的也是这个参数

public static List<Object> extractOUValues(String dn, List<Object> ouValues) {// 定义正则表达式,用于匹配 OU 属性及其值String ouPattern = "OU=([^,]+)";// 创建 Pattern 和 Matcher 对象Pattern pattern = Pattern.compile(ouPattern);Matcher matcher = pattern.matcher(dn);// 查找所有匹配的 OU 值并添加到列表while (matcher.find()) {if (!ouValues.contains(matcher.group(1))) {ouValues.add(matcher.group(1));}}return ouValues;}
[arthas@9890]$ watch com.hero.lte.ems.security.service.impl.LdapService extractOUValues {params,returnObj,throwExp} -x 8 -b -s
Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 190 ms, listenerId: 2
ts=2024-09-19 14:53:14; [cost=0.909333ms] result=@ArrayList[@Object[][@String[CN=testuser1,OU=testou1,OU=TechDir_Msk,OU=Moscow,DC=ms-dcs,DC=bee,DC=vimpelcom,DC=ru],@ArrayList[isEmpty=true;size=0],],null,null,
]
ts=2024-09-19 14:53:14; [cost=4.773943466517351E9ms] result=@ArrayList[@Object[][@String[CN=testuser1,OU=testou1,OU=TechDir_Msk,OU=Moscow,DC=ms-dcs,DC=bee,DC=vimpelcom,DC=ru],@ArrayList[@String[testou1],@String[TechDir_Msk],@String[Moscow],],],@ArrayList[@String[testou1],@String[TechDir_Msk],@String[Moscow],],null,
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550049.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[论文精读]Membership Inference Attacks Against Machine Learning Models

中文译名&#xff1a;针对机器学习模型的成员推理攻击 会议名称&#xff1a;2017 IEEE Symposium on Security and Privacy (SP) 发布链接&#xff1a;Membership Inference Attacks Against Machine Learning Models | IEEE Conference Publication | IEEE Xplore CODE:Git…

34 | 实战一(上):通过一段ID生成器代码,学习如何发现代码质量问题

在前面几篇文章中&#xff0c;我们讲了一些跟重构相关的理论知识&#xff0c;比如&#xff1a;持续重构、单元测试、代码的可测试性、解耦、编码规范。用一句话总结一下&#xff0c;重构就是发现代码质量问题&#xff0c;并且对其进行优化的过程。 前面的内容相对还是偏理论。…

中腾国际团餐产业集团经验谈:如何让上海央厨配送更高效、更安心

上海作为国际大都市&#xff0c;近些年对餐饮行业的效率与品质提出了更高要求。中央厨房(央厨)以其规模化、标准化生产的优势&#xff0c;成为提升餐饮供应链效率的关键一环。而央厨配送&#xff0c;作为连接央厨与消费者的重要桥梁&#xff0c;其重要性不言而喻。中腾国际团餐…

HTTPS协议详解:从原理到流程,全面解析安全传输的奥秘

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

uniapp实战教程:如何封装一个可复用的表单组件

在uniapp开发过程中&#xff0c;表单组件的使用场景非常广泛。为了提高开发效率&#xff0c;我们可以将常用的表单组件进行封装。本文将带你了解如何在uniapp中封装一个表单组件&#xff0c;让你只需要通过属性配置轻松实现各种表单&#xff0c;效果图如下&#xff1a; 一、准备…

ZYNQ PS 最小系统

ZYNQ PS 最小系统 ZYNQ 嵌入式开发流程 【正点原子】ZYNQ领航者V2之ARM篇 最小系统框图 最小系统步骤 创建 PS 双击 ZYNQ IP 核&#xff0c;启动配置界面&#xff1a; DDR 配置 小技巧&#xff0c;自动设置列宽&#xff1a; 串口配置 串口原理图&#xff1a; 配置串口引脚&…

sql注入工具升级:自动化时间盲注、布尔盲注

项目地址&#xff1a;https://github.com/iamnotamaster/sql-injecter 给我之前写的sql注入脚本进行了一些升级&#xff0c;此文章就是对升级内容的分析&#xff0c;升级内容如下&#xff1a; 使用占位符foo来填充payload里需要经常修改的部分 自动判断循环 支持爆破和二分查…

六练习题笔记

ps&#xff1a; 所有rpm包安装后的配置文件模板所在目录&#xff1a;/usr/share/doc/ x ### vsftpd有两种工作模式 连接方式&#xff1a; 命令连接&#xff08;命令信道&#xff09;&#xff1a;21 数据连接&#xff08;数据信道&#xff09;&#xff1a;20 和 随…

django的URL配置

1 django如何处理一个请求 首先Django要使用根URLconf模块&#xff0c;通过setting.py配置文件的ROOT_URLCONF来设置。 加载该模块后并查找变量 urlpatterns。这是一个Python的django.conf.urls.url()实例列表。 Django按顺序运行每个URL模式&#xff0c;并在匹配所请求的…

CHItrans简介--DVM

DVM基础flow 注&#xff1a;上图中&#xff0c;没有画出DVM指令对应的snoop request&#xff0c;相关snp请求如下所示&#xff1a; 对应的snp请求 Non-sync DVM trans flow Sync DVM trans flow Flow Control 后续的说明&#xff0c;参考&#xff1a; CHI协议之DVM操作_dvm r…

spring-boot 整合 mybatis

文章目录 Spring boot 整合Mybatis将数据返回到浏览器1、准备数据2. 创建一个 pojo 包&#xff0c;创建User实体类3. 创建一个mapper包&#xff0c;写一个UserMapper接口4. 创建一个service包&#xff0c;写一个UserService接口。5. 在 Service 包下创建一个子包&#xff0c;im…

如何制作Linux系统盘

文章目录 引言系统盘制作准备工作开始烧录 引言 有时候不想使用虚拟机来运行 linux 或者想要装个双系统&#xff0c;这时候就需要物理安装 linux 了。 其实跟装 windows 是一模一样的。 先烧录 u 盘&#xff0c;然后电脑插上 u 盘&#xff0c;重启电脑时换个启动盘&#xff…

吐血整理:国内一站式儿童有声绘本创作平台

儿童绘本儿童故事这个领域在Stable Diffusion、Midjourney、ChatGPT产品推出后开始有大量自媒体达人纷纷发布教程&#xff0c;热度一直都在。但由于创作门槛较高、需要对AI类和制作类软件都需要掌握、流程制作复杂&#xff0c;且由于创作者提示词的影响出图效果不稳定&#xff…

四气两尘监测站中空气质量传感器推荐

在快速发展的工业化进程中&#xff0c;空气质量已成为衡量一个地区环境健康水平的重要指标。随着公众环保意识的增强&#xff0c;对空气质量的关注不再局限于直观的蓝天白云&#xff0c;而是深入到更为细微、复杂的污染物层面&#xff0c;其中&#xff0c;“四气两尘”便是这一…

在matlab中Application Compiler后的软件无法打开

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

jenkins 构建报错ERROR: Error fetching remote repo ‘origin‘

问题描述 修改项目的仓库地址后&#xff0c;使用jenkins构建报错 Running as SYSTEM Building in workspace /var/jenkins_home/workspace/【测试】客户端/client-fonchain-main The recommended git tool is: NONE using credential 680a5841-cfa5-4d8a-bb38-977f796c26dd&g…

基于SSM的学校运动会信息管理系统【附源码】

基于SSM的学校运动会信息管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2 系统结构设计 4.3 数据库设计 4.3.1数据库E-R图设计 4.3.2数据库表设计 5.1 用户功能模块的实现 5.1.1用户注册界面 5.1.2用户登录界…

PID控制算法(六)

#include <stdio.h> #include <stdlib.h>// 定义PID结构体 typedef struct {float SetSpeed;float ActualSpeed;float err;float integral;float vo_out; //控制器输出float err_last;float Kp;float Ki;float Kd;float limit_min; // 输出限制最小值flo…

2024最新版网络安全图成长路线图,从零基础到精通_网络安全防御技术发展路线图

学习网络安全一定要培养兴趣&#xff0c;兴趣是最好的老师 刚开始抱着去尝试的心态。先坚持看完一套基础视频&#xff0c;或者看几本入门书。了解信息安全到底是干嘛的。 带着尝试的心态去干靶场。 不断去练习&#xff0c;不管是打靶场还是去挖漏洞&#xff0c;遇到问题去请教…

使用Flask和Python开发自己的API

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 本文章将一步一步教你如何使用Flask和Python从头开始设置自己的API。教程结束时&#xff0c;你将能够从头开始设置你自己的API。我将一步一步指导你&#xff0c;使你能够基于Flask和Python开发你自己的API。 什么是API&a…