本文主要介绍理想的远程调试tomcat,下面一起看看理想的远程调试tomcat相关资讯。
前言昨天看到一个问题结束后你最想吃什么?
仔细想想,火锅?烧烤?
看过体重秤后,我 恐怕我只能报名去健身房了。
你以为获得n斤的时间复杂度是o (2 n),其实是o(1),嗖。
回到正题
说到远程调试,基本上大部分idmock.从哪里来的坑
作者 的意图是建立一个简单,轻量级和一键式界面模拟系统,方便前端和后端的学生等人 接口。
基于以上目的,我使用嵌入式数据库sqlite配合springboot,构造了一个无需配置即可一行启动的小jar包。目录结构如下,数据库直接丢入资源:
开源后有同学提出bug,作者也正常操作。bug修正后,重新发行。
升级版的同学发现数据不见了,于是作者临时给了个方案,嵌入数据库,刚好把旧jar里的db文件盖到新jar里。
(db文件位于jar包中)
当你说这句话时,你可以 不要完全依赖瓦特。毕竟springboot sqlite的这种奇妙组合也是偶尔尝试工具紧凑性的产物。
其实稍微想一想,db文件和其他资源不一样,需要经常重写。当然,改变的不是jar包中的原始文件。
直到我收到一个问题,告诉作者将db文件复制到新的jar中没有 不会生效。
作者也很快反应过来,jar里的db文件怎么可能用?真正的文件不出意外放在了java.io.tmpdir下。
java.io.tmpdir的路径一般情况下,macos在$tmpdir中,win在%temp%中。
笔者也切换到了相应的目录,终于看到了jar运行时使用的真实db文件:
但是这种命名很奇怪,和原来的vmock.sqlite没有任何关系。
一路跟随sqlite的jdbc驱动源代码,找到org.sqlite.sqliteconnection的extractresource方法,看到命名代码:
其实很清楚,源代码是用sqlitejdbctmp拼接原jar中db文件的url类的hashcode作为文件名。我没有的原因。;我开发的时候没注意到,看看这个方法的第一个if判断就知道了。
我 我习惯在ide中使用springboot或者application模式直接启动项目,而不是打包后。
所以当协议是文件而不是jar时,目标/classes/db/vmock。sqlite文件可以直接使用,不需要生成临时文件。
在开发时,db可视化工具还连接到target/classes/db/vmock。sqlite,所以当时没有发现任何疑问。
其实这是一个正常的操作。在很多地方,源代码可以判断是运行在通用的web环境还是jar中。如果有这方面的调试,你要想好自己的启动。
所以如果你想在第一个if后中断,看看效果,其中一个选项就是使用远程调试。
想法和建议远程调试;的远程调试模块真的很贴心。傻瓜 的操作和命令都会生成。不知道现在的eclipse版本有没有这么周到?
从配置中搜索远程模板,点击右上角的创建配置,创建远程调试启动模式。
调试器模式可以选择附加到远程jvm,它还有一个远程jvm的选项,顾名思义,一个是主动附加到启动的程序,一个是被动。
不用说,ip和端口是本地jar包直接使用的,所以填入了localhost。如果右边的jdk版本使用其他版本,需要调整。
中间的文本框是生成的jvm参数,非常人性化。直接在javajarag: jdwp = transport = dt _ socket,server = y,suspend = n,address = 5005vmock.jar中添加启动命令即可。
你不 根本不用担心命令的含义。如果你想知道,作者大概会解释:
ag: jdwp最重要的参数就是启动jdwp代理。jdwp的全称是java debug wire protocol,是给的一个方便的调试工具。transport=dt_socket通过socket传输数据,dt大概是data transfer的缩写。server=y开始调试服务器端。注意,因为作者在上面选择了attach to remot。e jvm,所以这是y,等待调试器附加。如果你选择倾听模式,情况正好相反。调试器是server,这里是n,suspend=n是否挂起,这里设置为n,表示程序正常运行,需要时随时可以挂接。如果设置为y,程序会等待调试器挂接后再继续执行,比如启动源代码的调试场景。地址=5005,调试端口设置为5005,当然也可以使用其他端口。启动jar包,按照刚才创建的进行调试,预期的断点位置已经成功到达。
最后找到原因后,作者还根据sqlitejdbc源代码中的命名方法开发了一种数据迁移方法。
即自动或手动找到以前版本的数据库文件,复制并以新版本的hashcode命名。
springboot嵌入式数据库是一个非常 不当 组合,但是小玩意开发的挺好的。如果你遇到同样的数据迁移问题,你不妨参考作者 的解决方案。
了解更多理想的远程调试tomcat相关内容请关注本站点。