程序调试

手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理

我的梦境 提交于 2019-12-04 21:09:45
摘自: https://www.cnblogs.com/goodAndyxublog/p/11880314.html 手把手教你实现热更新功能,带你了解 Arthas 热更新背后的原理 文章来源: https://studyidea.cn/java-hotswap 一、前言 # 一天下午正在摸鱼的时候,测试小姐姐走了过来求助,说是需要改动测试环境 mock 应用。但是这个应用一时半会又找不到源代码存在何处。但是测试小姐姐的活还是一定要帮,突然想起了 Arthas 可以热更新应用代码,按照网上的步骤,反编译应用代码,加上需要改动的逻辑,最后热更新成功。对此,测试小姐姐很满意,并表示下次会少提 Bug。 嘿嘿,以前一直对热更新背后原理很好奇,借着这个机会,研究一下热更新的原理。 二、Arthas 热更新 # 我们先来看下 Arthas 是如何热更新的。 详情参考: 阿里巴巴Arthas实践--jad/mc/redefine线上热更新一条龙 假设我们现在有一个 HelloService 类,逻辑如下,现在我们使用 Arthas 热更新代码,让其输出 hello arthas 。 Copy public class HelloService { public static void main(String[] args) throws InterruptedException {

SOS.DLL在windbg里加载错误

强颜欢笑 提交于 2019-12-04 20:57:49
sos.dll/mscordacwks.dll 公共语言运行库(CLR)是执行托管代码的Microsoft.NET框架的核心引擎。简单地说,它通过在托管程序集中使用中间语言和元数据,JIT按需编译代码,构建程序集定义和使用的类型的内存表示,并确保生成的代码是安全的、安全的和可验证的,并在需要时执行。这个引擎本身是用本机代码实现的。当我们想使用本机调试器(如CDB或WinDBG)调试.NET应用程序时(如果我们想使用事后内存转储文件调试它,我们目前做了很多工作),我们必须在本机调试器和托管世界之间使用“桥”,因为本机调试器本身并不理解托管代码。它是本机调试器。 为了提供这个桥,CLR附带了一个调试扩展名SOS.DLL。这理解CLR的内部结构,因此允许我们执行诸如输出托管调用堆栈、转储托管堆等操作。 但是,这些内部数据结构和CLR的详细信息会不时发生变化,因此,从使.NET应用程序工作的CLR的实际内部实现中抽象出此调试器扩展所需的CLR接口是非常有用的。输入mscordacwks.dll。这提供了数据访问组件(DAC),该组件允许SOS.DLL调试器扩展解释维护.NET应用程序状态的内存中数据结构。 如果您在框架文件夹中查看,则应始终看到这些dll的匹配集: 32位的 C:\Windows\Microsoft.NET\Framework\v4.0.30319 64位的 C:

【Chorme】前端调试工具之Chorme专篇

流过昼夜 提交于 2019-12-04 19:51:27
【相关来源】 Browser-Sync:响应式Web开发调试利器 开发者调试工具Chrome Workspace Chrome中的 workspace 工具 (官方) Chrome调试工具developer tool技巧 【 Chrome开发,debug的使用方法。 】 【 Google Chrome调试js入门 】 Chrome调试工具developer tool技巧: http://www.xuanfengge.com/chrome-developer-debugging-tool-tool-tips.html Browser-Sync:响应式Web开发调试利器: http://www.alloyteam.com/2014/02/browser-sync-responsive-web-development-and-debugging-tool/ ----------------------------------------------------------------------------- Google Chrome调试js入门 Google Chrome无论在我们平时的上网冲浪、或者程序开发,都给我们带来很大的便利,而这样创新、不作恶的一家公司在中国却走不下去。希望本篇使用Google Chrome中的开发者工具调试js文章,能带给每天来本站的数百位朋友一些帮助

2019-2020-2-20175209 20175213 20175214-实验二固件程序设计

青春壹個敷衍的年華 提交于 2019-12-04 18:52:01
实验二 固件程序设计 本小组成员: 20175209 王梓鸿 20175213 吕正宏 20175214 林郅聪 实验二 固件程序设计-1-MDK 实验内容: 1.注意不经老师允许不准烧写自己修改的代码 2.三人一组 3.参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM) 4.提交破解程序中产生LIC的截图 5.提交破解成功的截图 实验步骤: 找到exp2\软件资料\MDK4.74路径下的mdk474.exe文件,点击并安装。注意此过程中安装目标路径是自己创建的一个名为Keil 4的文件夹。 安装Ulink驱动。 在桌面上创建的快捷方式“Keil uVision4”上右键,选择“以管理员身份运行”。 按照实验指导书上的操作进行软件安装,然后运行 uVision4,点 File>>License Management-->复制 CID-->运行keil-MDK注册机(在“Z32开发指南\2.软件资料\keil-MDK 注册机”双击“keil mdk474注册机”),最后粘贴 CID 并选择 ARM。 将LIC复制并将其粘贴到keil4中的LIC输入框中,进行破解。 实验二 固件程序设计-2-LED 实验内容: 0

DbgUiConnectToDbg(ntdll.dll)函数

冷暖自知 提交于 2019-12-04 18:41:51
该函数由 DbgUiConnectToDbg(ntdll.dll)函数 调用。 其调用时传入的参数如下:    函数作用:初始化被调试的内核对象,将被调试对象句柄放入调试对象的 [fs:f24]处。       1.现在我们了解到 [FS:F24]处存放的是被调试程序的调试对象句柄。   2.当被调试程序中断时,其会发送给调试程序指令,其就存放在 DebugObject.EventList中。 来源: https://www.cnblogs.com/onetrainee/p/11878131.html

GDB调试

余生颓废 提交于 2019-12-04 18:31:31
GDB介绍 使用GDB 调试命令 GDB介绍   GUN Procject debugger   支持 汇编、C、C++、GO等语言   使用printf调试代码,及其低效耗时,尤其对于工程代码。GDB调试是Linux平台上最为强大的调试工具。 使用GDB   对于C程序来说,需要在编译时加上-g参数,保留调试信息,否则不能使用GDB进行调试,会出现 no debugging symbols found的信息。   Reading symbols from helloWorld...done.表明可调试。 GDB启动调试未运行的程序   1)调试启动无参程序 $ gdb hello .................. (gdb)run   直接输入run   2)调试带参程序   run + 参数 #include<stdio.h> int main(int argc,char *argv[]) { if(1 >= argc) { printf("usage:hello name\n"); return 0; } printf("Hello World %s!\n",argv[1]); return 0 ; }   编译: gcc -g -o hello hello.c   启动调试并设置参数   3)调试core文件   当程序core dump时,可能会产生core文件

2019-2020-1 20175302 201752314 20175316 实验二 固件程序设计

为君一笑 提交于 2019-12-04 18:26:51
2019-2020-1 20175302 201752314 20175316 实验二 固件程序设计 实验二 固件程序设计-1-MDK 实验内容 0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM) 3. 提交破解程序中产生LIC的截图 4. 提交破解成功的截图 实验步骤 • 运行exp2/软件资料/MDK4.74/.exe安装MDK-ARM • 安装JLink • 破解MDK4.74:复制CID到keil-MDK注册机中,Target选择ARM,点击generate生成LIC • 将LIC复制到keil4中的LIC输入框,点击Add LIC,破解完成。 实验二 固件程序设计-2-LED 实验内容 0. 注意不经老师允许不准烧写自己修改的代码 1. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图 2. 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关

2019-2020-1 20175234 20175205 20175217 实验二 固件程序设计

人走茶凉 提交于 2019-12-04 18:14:58
2019-2020-1 20175234 20175205 20175217 实验二 固件程序设计 实验内容 1-MDK 实验要求 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM) 提交破解程序中产生LIC的截图 提交破解成功的截图 实验步骤 按照实验指导书上的操作进行软件安装 运行 uVision4,点 File>>License Management-->复制 CID 运行keil-MDK注册机(在“Z32开发指南\2.软件资料\keil-MDK 注册机”双击“keil mdk474注册机”) 粘贴 CID 并选择 ARM。 2-LED 实验要求 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图 参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图 实验报告中分析代码 实验步骤 首先先在 KEIL-MDK 中添加 Z32 SC-000 芯片库,操作过程为: 打开 keil

eclipse调试arm裸机程序

自作多情 提交于 2019-12-04 17:57:12
一、集成开发环境 软件部分:eclipse , GDB Server , Jlink软件 硬件部分:Jlink硬件 准备工作1 :从SD/NOR Flash启动, 格式化nand flash 准备工作2 :硬件连接 1. Jlink连接 2. 串口连接 3. nand启动 二、安装GDB Server 解压:tar xvzf arm-linux-gdb-7.5.tar.gz 进入目录:cd arm-linux-gdb-7.5 编译安装:./build-all 上面执行好后,gdb工具就安装好了,安装在/opt/arm-linux-gdb 为了方便使用,需要添加环境变量:vim /root/.bashrc 在交叉编译链的 前面 添加gdb的环境变量: export PATH=$PATH:/opt/arm-linux-gdb/bin/ export PATH=$PATH:/usr/local/arm/4.3.2/bin/ 之后保存,退出。这就可以直接运行arm-linux-gdb,如果不行的话则可能是添加错误,或者需要注销。 问:为什么一定要添加到交叉编译链之前呢? 答:因为在交叉编译链中也包含了arm-linux-gdb,linux系统会根据path环境变量的先后顺序来寻找,我们需要找的是我们上面安装的,而不是这里的(因为版本可能不对),所以在添加环境变量的时候

WEB 调试利器:Fiddler 教程

Deadly 提交于 2019-12-04 16:38:23
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大的帮助。 阅读目录 Fiddler的基本介绍 Fiddler的工作原理 同类的其它工具 Fiddler如何捕获Firefox的会话 Firefox 中使用Fiddler插件 Fiddler如何捕获HTTPS会话 Fiddler的基本界面 Fiddler的统计视图 QuickExec命令行的使用 Fiddler中设置断点修改Request Fiddler中设置断点修改Response Fiddler中创建AutoResponder规则 Fiddler中如何过滤会话 Fiddler中会话比较功能 Fiddler中提供的编码小工具 Fiddler中查询会话 Fiddler中保存会话 Fiddler的script系统 如何在VS调试网站的时候使用Fiddler Response 是乱码的 Fiddler的基本介绍 Fiddler的官方网站: www.fiddler2.com Fiddler官方网站提供了大量的帮助文档和视频教程, 这是学习Fiddler的最好资料。 Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点