「java电路追踪」java代码追踪
今天给各位分享java电路追踪的知识,其中也会对java代码追踪进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java如何让自定义异常不追踪堆栈信息
1)先定义一个类继承Exception(或者别的RuntimeException等);
2)然后写个方法可能抛出这个异常,并且什么情况下会抛出异常;
3)调用这个方法,写try,catch语句,捕获这个异常;
小例子,你参考看下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class UserNotFoundException extends RuntimeException {
public UserNotFoundException() {}
public UserNotFoundException(String message) {
super(message);
}
public void f() throws UserNotFoundException {
throw new UserNotFoundException("用户名不对");
}
}
public class Exception {
public static void main(String args[]) {
try {
new UserNotFoundException().f();
} catch (UserNotFoundException e) {
System.out.println(e.getMessage());
}
}
}
只有java有在线诊断工具吗
Arthas 是Alibaba开源的Java诊断工具。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
怎么快速定位应用的热点,生成火焰图?
Arthas支持jdk6+,多种系统版本,采用命令行交互模式,同时提供丰富的tab自动补全功能,进一步方便我们进行问题的定位和诊断
1.2、快速安装
1.2.1、Linux下按
下载arthas-boot.jar,在使用java -jar方式启动即可。
命令
**注意:**在进行第二条命令之前,先运行一个Java程序在内存之中,否则会报错
2、快速入门
2.1、attach一个进程
目标:
1、执行一个jar包
2、通过arthas来attach来追踪
3、进行常用的命令操作
如果端口号被占用,也可以通过命令换成另一个端口号执行。
总结:
1、启动进程
2、启动arthas-boot.jar,进入启动的进程
3、不但可以通过命令行的方式来操作arthas也可以通过浏览器来访问arthas
2.2、常用命令接触
1、dashboard仪表板
2、通过thread命令来获取到arthas-demo进程的Main Class
3、通过jad来反编译Main Clas
4、wathch具体方法
2.2.1.、dashboard仪表板
在这里插入图片描述
2.2.2、通过thread命令来获取到arthas-demo进程的Main Class
在这里插入图片描述
2.2.3、通过jad反编译Main Class
在这里插入图片描述
2.2.4、watch监视
demo.MathGame primeFactors:
demo.MathGame:包名+类名
primeFactors:方法名
returnObj:返回参数的表达式
2.2.5、退出arthas
如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出arthas,可以执行stop命令
在这里插入图片描述
2.3、基础命令1
1、help:查看所有帮助信息
2、cat:显示文本文件内容
3、grep:匹配查找,和linux中的grep类似,但只能用于管道命令
在这里插入图片描述
4、pwd:显示当先目录的目录地址
5、cls:清屏
2.4、基础命令2
1、session:查看当前会话信息
在这里插入图片描述
2、reset:重置增强类,将被arthas增强过的类全部还原,arthas服务端关闭时会重置所有增强过的类
在这里插入图片描述
在这里插入图片描述
3、version:输出当前目标Java进程所加载 的Arthas版本号
4、quit:退出当前Arthas客户端,其他Arthas客户端不受影响。
5、stop:关闭Arthas服务端,所有Arthas客户端全部退出。
6、keymap:Arthas快捷键列表及自定义快捷键
7、history:和linux系统作用一样 打印命令历史
3、JVM相关命令
1、dashboard
在这里插入图片描述
2、thread 线程相关:查看当前jvm的线程堆栈的信息
在这里插入图片描述
3、jvm 虚拟机相关
4、sysprop 系统属性相关
5、sysenv:查看当前jvm的环境属性
在这里插入图片描述
6、vmoption:查看、更新vm诊断相关的参数
7、getstatic:方便的查看类的静态属性
语法:getstatic 类名 属性名
8、ognl
在这里插入图片描述
3.1、反编译 jad
比如编译string类
–source-only : 只显示源码
只反编译指定的方法
xx 就是方法名
3.2、内存编译mc
内存编译器,编译.java文件生成.class
在这里插入图片描述
在这里插入图片描述
4、Arthas进阶
4.1、目标
类与类加载器
monitor、watch、trace、stack等核心命令的使用
火焰图的生存
arthas实战案例
4.2、dump
将已加载的字节码文件保存到特定的目录下,logs/arthas/classdump/
在这里插入图片描述
举例:
在这里插入图片描述
4.3、classloader
获取类加载器的信息
作用:
将jvm中所有的classloader的信息统计出来,并可以展示继承树,urls等。
让指定的classloader去getResources,打印出所有查找到的resources的url。
在这里插入图片描述
4.4、monitor
监控指定类中方法的执行情况
作用:
在这里插入图片描述
在这里插入图片描述
4.5、watch(重要)
观察到指定方法的调用情况
作用:
方法执行数据观测,方便观测到指定方法的调用情况
能观察到的范围:返回值、抛出异常、入参。通过编写OGNL表达式进行对应变量的查看
在这里插入图片描述
在这里插入图片描述
只查看第一个参数小于0的情况
在这里插入图片描述
文章知识点与官方知识档案匹配
Java技能树首页概览
89145 人正在系统学习中
打开CSDN,阅读体验更佳
java应用线上诊断神器--Arthas_linyb极客之路的博客
c、保存好/tmp/UserServiceImpl.java之后,使用mc(Memory Compiler)命令来编译,并且通过–classLoaderClass参数指定ClassLoader mc--classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader/tmp/UserServiceImpl.java-d/tmp ...
继续访问
java线上诊断工具,Java线上诊断神器Arthas-1_Skogkatt的博客-CSDN...
Arthas 是Alibaba 开源的一款线上诊断工具,相比Java 自带的jinfo, jmap,jstat 等工具更方便(起码不用记那么多参数),而且利用字节码增强技术,可以很好的对线上的问题进行定位以及解决,不用再为生产或者测试环境无法debug而感到无能为力。...
继续访问
最新发布 Arthas常用命令
arthas指令大全
继续访问
Arthas在线java进程诊断工具 在线调试神器
Arthas在线java进程诊断工具 在线调试神器 tag: java 诊断 堆栈 在线调试 耗时 死锁 arthas 阿里巴巴 Arthas 是 Alibaba 开源的Java诊断工具,深受开发者喜爱。 官网文档: 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在.
继续访问
Java在线诊断利器之Arthas_Java老K的博客
Arthas是阿里在2019年9月份开源的一款java在线诊断工具,能够分析、诊断、定位java应用问题,例如:jvm信息、线程信息、搜索类中的方法、 跟踪代码执行、观测方法的入参和返回参数等等。 Arthas最大的特点是能在不修改代码和不需要重新发布的...
继续访问
java线上诊断神器 --Arthas__小鱼塘的博客_java网络诊断
java线上诊断神器 --Arthas 最近在工作中用到的一个非常很好的线上诊断,分析问题的神器,再次记录一下: 官方文档:简介 | arthas GitHub 地址:GitHub - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas...
继续访问
Arthas使用教程(8大分类)
1、基础命令。2、JVM相关。3、类与类加载器。4、option全局选项。5、项目中使用案例。
继续访问
Arthas介绍
这篇文章为大家推荐一个为Java应用程序排查问题的非常好用的工具:Arthas,首先声明一下,这边文章并不是教大家如何使用,它只是一个搬运工,在Arthas的github上已经有非常详细的使用教程了。 Arthas(阿尔萨斯)是阿里巴巴开源的Java诊断工具,深受开发者喜爱 当你遇到以下类似问题而束手无策时,Arthas统统可以帮你解决 某个类是从哪个jar包加载的,为什么会报各种类相关的Exc...
继续访问
Arthas - Java线上诊断工具_是良辰的博客
java -jar arthas-boot.jar 启动之后就可以看到一个java程序列表,像我这就是只有一个java程序在跑,就是当前根目录下面的app.jar 选择1,即可对app.jar进行监控诊断。 PS:如果是虚拟机,直接在应用服务器上面执行上面的命令,如果是docke...
继续访问
java线上诊断工具Arthas-实战案例_小姐姐修灯泡吗的博客
首先我就来简单介绍下他的作用:(粘贴官网)Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。 Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的...
继续访问
arthas 使用教程
arthas安装使用 首先是安装,说白了其实把他当成一个工具来用就行了,你什么服务需要在线进行性能情况的一个监测和性能的瓶颈排查。第三步启动arthas-boot.jar,启动的时候要注意你需要监测的java是启动的可以用jps-l命令查看你的java服务。第二步把jar包上传到你需要进行java性能监测的服务器上。线上正式环境把他当成一个排查慢问题的工具还是很好用的。以上就是启动服务了下面开始介绍常用的一些排查命令。...
继续访问
Arthas
Arthas.md 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,...
继续访问
Java线上问题诊断工具Arthas_星光Starsray的博客
java -jar arthas-boot.jar //启动 当看到控制台出现arthas的标志,表明启动成功!注意此时已经进入控制台,主要是arthas的命令使用。 [root@xxptweb01 arthas]# java -jar arthas-boot.jar
继续访问
【Java】性能问题诊断利器Arthas --常用命令示例_叹了口丶气的博客-C...
Arthas 是一款阿里开源的 Java 线上诊断工具,功能强大,可以在不修改代码或者重启服务的情况下快速定位线上问题。 官方文档:Arthas官网 二、安装 从官网下载 Arthas 全量包安装(因为快速安装可能因网络原因下载失败),然后用 java -jar 方...
继续访问
Java诊断工具Arthas使用说明
Arthas 是Alibaba开源的Java诊断工具,Arthas支持JDK 6+,支持Linux/Mac/Windows,支持命令行交互模式、 Tab 自动补全功能,方便进行问题的定位和诊断。
继续访问
JVM性能调优篇07-阿里巴巴Arthas工具详解
阿里巴巴Arthas工具详解
继续访问
Arthas 是Alibaba开源的Java诊断工具
Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行...
继续访问
JVM之GC 调优工具 Arthas 实战使用(二)
Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。Arthas 支持 JDK 6以上版本,支持 Linux/Mac/Windows,而且这些环境的命令都一样,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进行问题的定位和诊断 官方文档参考 一、下载和安装 不需要安装,就是一个 jar 包 curl -O
继续访问
Arthas详解
文章目录概述安装快速安装使用`arthas-boot`(官网推荐)使用`as.sh`全量安装把Arthas安装到基础镜像里卸载使用命令详解基础命令helpcatechogrepbase64teepwdclsversionhistorykeymap后台异步命令相关快捷键会话相关quitstopsessionresetjvm相关dashboardthreadjvmsyspropsysenvvmoptionperfcounterloggergetstaticognlmbeanheapdumpvmtoolclass
继续访问
Arthas基础
Arthas:快速入门
继续访问
Arthas入门到精通
Arthas是Alibaba开源的一款Java诊断工具,方便开发者在线排查问题,无需重启,同时可以跟踪Java代码,实时监控JVM状态,目前Arthas仅支持JDK6+,支持Linux/Mac/Windows,采用命令行交互模式,具有 Tab 自动补全功能,便于开发者进行快速定位和诊断问题。 离线全量下载(如果服务器没有外网可以采用这种情况)
继续访问
阿里Java诊断工具 arthas - 介绍及指令大全
一、arthas Arthas` 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到
继续访问
java诊断神器 arthas(阿尔萨斯)
java诊断神器 arthas(阿尔萨斯) 官网地址: 1、快速开始 1.1、windows版本安装 # 命令行输入 curl -0 --output arthas-boot.jar # 启动arthas 注意:启动前已经要有java进程运行,否则无法进入 java -jar arthas-boot.jar --telnet-por
继续访问
帮助定位Java方法优化之arthas端口被占用解决的办法
另起一个端口号 启动arthas命令的后面加上端口号的相关参数 java -jar arthas-boot.jar --telnet-port 端口号 --http-port -1 关闭占用端口的服务 先进入占用端口的服务,然后输入stop将它停掉就可以了 注:请再每一次使用之后使用stop命令退出,这样也省掉一些不必要的麻烦!!! ...
继续访问
Java 诊断工具之 Arthas
Arthas 是 Alibaba 开源的 Java 诊断工具。Ta 可以动态跟踪 Java 代码,实时监控 JVM 状态,可以在不中断程序执行的情况下轻松完成 JVM 相关问题排查工作。支持 JDK 6+,支持 Linux/Mac/Windows。
继续访问
Arthas-java在线调试工具的使用
一、arthas能干什么? 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 怎样直接从JVM内查找某个类的实例? Arthas支持JDK 6+
继续访问
Java线上诊断工具Arthas
概述 Arthas是一个开源的线上诊断工具,可以实时查看线上代码运行情况,详情参考Arthas 命令列表 jad命令(获取已加载类的源码) //主要用来看已经加载了类的源码,一般用于动态加载的class的源码比较方便 [arthas@773]$ jad com/example/jvm/Hello ClassLoader: +-sun.misc.Launcher$AppClassLoader@18b4aac2 +-sun.misc.Launcher$ExtClassLoader@362d9..
继续访问
java 线上诊断命令
java
学习
Java或者C/C++怎么用回溯法解决最小长度电路板排列问题
以java为例,希望能够帮到你。
电路板排列问题
问题描述
将n块电路板以最佳排列方式插入带有n个插槽的机箱中。n块电路板的不同排列方式对应于不同的电路板插入方案。设B={1, 2, …, n}是n块电路板的集合,L={N1, N2, …, Nm}是连接这n块电路板中若干电路板的m个连接块。Ni是B的一个子集,且Ni中的电路板用同一条导线连接在一起。设x表示n块电路板的一个排列,即在机箱的第i个插槽中插入的电路板编号是x[i]。x所确定的电路板排列Density (x)密度定义为跨越相邻电路板插槽的最大连线数。
例:如图,设n=8, m=5,给定n块电路板及其m个连接块:B={1, 2, 3, 4, 5, 6, 7, 8},N1={4, 5, 6},N2={2, 3},N3={1, 3},N4={3, 6},N5={7, 8};其中两个可能的排列如图所示,则该电路板排列的密度分别是2,3。
左上图中,跨越插槽2和3,4和5,以及插槽5和6的连线数均为2。插槽6和7之间无跨越连线。其余插槽之间只有1条跨越连线。在设计机箱时,插槽一侧的布线间隙由电路板的排列的密度确定。因此,电路板排列问题要求对于给定的电路板连接条件(连接块),确定电路板的最佳排列,使其具有最小密度。
问题分析
电路板排列问题是NP难问题,因此不大可能找到解此问题的多项式时间算法。考虑采用回溯法系统的搜索问题解空间的排列树,找出电路板的最佳排列。设用数组B表示输入。B[i][j]的值为1当且仅当电路板i在连接块Nj中。设total[j]是连接块Nj中的电路板数。对于电路板的部分排列x[1:i],设now[j]是x[1:i]中所包含的Nj中的电路板数。由此可知,连接块Nj的连线跨越插槽i和i+1当且仅当now[j]0且now[j]!=total[j]。用这个条件来计算插槽i和i+1间的连线密度。
重点难点
算法具体实现如下:
//电路板排列问题 回溯法求解
#include "stdafx.h"
#include iostream
#include fstream
using namespace std;
ifstream fin("5d11.txt");
class Board
{
friend int Arrangement(int **B, int n, int m, int bestx[]);
private:
void Backtrack(int i,int cd);
int n, //电路板数
m, //连接板数
*x, //当前解
*bestx,//当前最优解
bestd, //当前最优密度
*total, //total[j]=连接块j的电路板数
*now, //now[j]=当前解中所含连接块j的电路板数
**B; //连接块数组
};
template class Type
inline void Swap(Type a, Type b);
int Arrangement(int **B, int n, int m, int bestx[]);
int main()
{
int m = 5,n = 8;
int bestx[9];
//B={1,2,3,4,5,6,7,8}
//N1={4,5,6},N2={2,3},N3={1,3},N4={3,6},N5={7,8}
cout"m="m",n="nendl;
cout"N1={4,5,6},N2={2,3},N3={1,3},N4={3,6},N5={7,8}"endl;
cout"二维数组B如下:"endl;
//构造B
int **B = new int*[n+1];
for(int i=1; i=n; i++)
{
B[i] = new int[m+1];
}
for(int i=1; i=n; i++)
{
for(int j=1; j=m ;j++)
{
finB[i][j];
coutB[i][j]" ";
}
coutendl;
}
cout"当前最优密度为:"Arrangement(B,n,m,bestx)endl;
cout"最优排列为:"endl;
for(int i=1; i=n; i++)
{
coutbestx[i]" ";
}
coutendl;
for(int i=1; i=n; i++)
{
delete[] B[i];
}
delete[] B;
return 0;
}
//核心代码
void Board::Backtrack(int i,int cd)//回溯法搜索排列树
{
if(i == n)
{
for(int j=1; j=n; j++)
{
bestx[j] = x[j];
}
bestd = cd;
}
else
{
for(int j=i; j=n; j++)
{
//选择x[j]为下一块电路板
int ld = 0;
for(int k=1; k=m; k++)
{
now[k] += B[x[j]][k];
if(now[k]0 total[k]!=now[k])
{
ld ++;
}
}
//更新ld
if(cdld)
{
ld = cd;
}
if(ldbestd)//搜索子树
{
Swap(x[i],x[j]);
Backtrack(i+1,ld);
Swap(x[i],x[j]);
//恢复状态
for(int k=1; k=m; k++)
{
now[k] -= B[x[j]][k];
}
}
}
}
}
int Arrangement(int **B, int n, int m, int bestx[])
{
Board X;
//初始化X
X.x = new int[n+1];
X.total = new int[m+1];
X.now = new int[m+1];
X.B = B;
X.n = n;
X.m = m;
X.bestx = bestx;
X.bestd = m+1;
//初始化total和now
for(int i=1; i=m; i++)
{
X.total[i] = 0;
X.now[i] = 0;
}
//初始化x为单位排列并计算total
for(int i=1; i=n; i++)
{
X.x[i] = i;
for(int j=1; j=m; j++)
{
X.total[j] += B[i][j];
}
}
//回溯搜索
X.Backtrack(1,0);
delete []X.x;
delete []X.total;
delete []X.now;
return X.bestd;
}
template class Type
inline void Swap(Type a, Type b)
{
Type temp=a;
a=b;
b=temp;
}
算法效率
在解空间排列树的每个节点处,算法Backtrack花费O(m)计算时间为每个儿子节点计算密度。因此计算密度所消耗的总计算时间为O(mn!)。另外,生成排列树需要O(n!)时间。每次更新当前最优解至少使bestd减少1,而算法运行结束时bestd=0。因此最优解被更新的额次数为O(m)。更新最优解需要O(mn)时间。综上,解电路板排列问题的回溯算法Backtrack所需要的计算时间为O(mn!)。
程序运行结果为:
如何实现用软件控制现实中的电路,java可以
JAVA可以干很多事情,自然也可以进行电路控制,下面是我实现的用JAVA控制8盏LED灯,能控制LED灯,自然也就能控制其它电器一类的东西了,只要把LED灯换成其它的电器或者自己想要控制的外设就行了。
上位机,与下位机都是JAVA,它们之间通过无线通信进行联结,联结后,只要在DOS屏下手工控制,比如输入"open1",则第一个灯亮,输入"open5"则第五个灯亮,输入"close1"则把第一个关掉最。
能控制LED灯,自然也就能控制其它电器了,到时候与”安琪儿智能程序"一连接,就可以进行语音控制电路了,呼呼~~
java电路追踪的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java代码追踪、java电路追踪的信息别忘了在本站进行查找喔。
发布于:2022-12-24,除非注明,否则均为
原创文章,转载请注明出处。