程序调试

序列化和反序列化

我怕爱的太早我们不能终老 提交于 2020-02-06 00:25:59
1, 摘要   序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且会让系统更加易于调试、便于扩展。本文从多个角度去分析和讲解“序列化和反序列化”,并对比了当前流行的几种序列化协议,期望对读者做序列化选型有所帮助。   简介   文章作者服务于美团推荐与个性化组,该组致力于为美团用户提供每天billion级别的高质量个性化推荐以及排序服务。从Terabyte级别的用户行为数据,到Gigabyte级别的Deal/Poi数据;从对实时性要求毫秒以内的用户实时地理位置数据,到定期后台job数据,推荐与重排序系统需要多种类型的数据服务。推荐与重排序系统客户包括各种内部服务、美团客户端、美团网站。为了提供高质量的数据服务,为了实现与上下游各系统进行良好的对接,序列化和反序列化的选型往往是我们做系统设计的一个重要考虑因素。   本文内容按如下方式组织: 第一部分给出了序列化和反序列化的定义,以及其在通讯协议中所处的位置。 第二部分从使用者的角度探讨了序列化协议的一些特性。

【pycharm】pycharm断点调试

狂风中的少年 提交于 2020-02-05 14:55:08
step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数); step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。有一点,经过我们简单的调试,在不存在子函数的情况下是和step into效果一样的(简而言之,越过子函数,但子函数会执行)。 step out:当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。 下面以 pycharm IDE 为示例作简要说明: 点击 pycharm 右上部爬虫按钮进入调试状态,程序在第14行断点处停止,按 F5(step into)进入 add() 函数,按 F7(step out) 执行完add()函数余下部分,返回入口函数 debug_test() 继续执行,按 F6(step over) 直接将 divide() 函数执行完。最后单步执行至入口函数结束 来源: https://www.cnblogs.com/dhs94/p/9363130.html

PyCharm断点调试django

只愿长相守 提交于 2020-02-05 14:54:20
我在用PyCharm开发django程序的时候,对于打印日志调试程序的方式感觉还是有点麻烦和不直观,所以研究了一下断点调试的方法如下: 1、打开你的工程,在菜单栏里找到Run-->Edit Configurations 2、在打开的对话框里边选择Python,点击+号 4、选择Python 5、出现了一个新的项Unnamed,你可以把它改名叫debug,好听一点 6、脚本选择你网站的manage.py,脚本参数用runserver,跟你平常用命令行是一样的,聪明的同学应该已经发现了,也可以配置migrate(数据库同步)等等命令参数,来实现命令的快速运行,省的手敲了 7、之后在菜单栏里找到Run-->Debug'debug',并点击 8、运行后,你能在Console中看到服务器已经运行起来了,有日志打印 9、之后在你的程序里打断点试试吧,当程序运行到你的断点就会定住了,愉快的调试吧! 来源: https://www.cnblogs.com/qq_841161825/p/8989956.html

每日一技|巧用 Telnet 调试 Dubbo 服务

徘徊边缘 提交于 2020-02-05 13:16:39
个人博客地址 studyidea.cn ,点击查看更多原创文章 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态。服务恢复之后,我们需要修复这笔数据至正常状态,怎么办? 如果仅是简单的服务,涉及少量数据变更,我们可以直接使用 SQL ,变更数据状态。但是有些情况下,服务需要联动调用其他系统,变更其他系统数据。这种情况下,变更数据非常麻烦,需要与其他系统开发沟通,整理数据,一起变更。如果涉及还涉及外部系统,数据变更几乎玩不下去了。 如果服务接口能重试,重新调用,那么数据变更就交给服务自动去调用即可。这个过程我们需要组装参数,然后调用服务接口。如果你的服务采用 Http 接口,可以使用 Curl 等命令重试。如果你的服务使用 Dubbo ,这就需要使用到 Telnet 命令。 0x01. telnet 进入 Dubbo 调试 通过以下指令,连接 Dubbo 服务。 telnet IP PORT #例如: telnet localhost 20880 Dubbo 版本需要大于 2.0.5,远程调用需要注意网络是否可用 连上之后,按下 回车键 将会进入以下页面: 这个界面与 Shell 类似,需要我们输入相关命令。例如: 命令参考手册: http://dubbo.apache.org/zh-cn/docs/user/references

每日一技|巧用 Telnet 调试 Dubbo 服务

浪子不回头ぞ 提交于 2020-02-05 11:51:04
个人博客地址 studyidea.cn ,点击查看更多原创文章 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态。服务恢复之后,我们需要修复这笔数据至正常状态,怎么办? 如果仅是简单的服务,涉及少量数据变更,我们可以直接使用 SQL ,变更数据状态。但是有些情况下,服务需要联动调用其他系统,变更其他系统数据。这种情况下,变更数据非常麻烦,需要与其他系统开发沟通,整理数据,一起变更。如果涉及还涉及外部系统,数据变更几乎玩不下去了。 如果服务接口能重试,重新调用,那么数据变更就交给服务自动去调用即可。这个过程我们需要组装参数,然后调用服务接口。如果你的服务采用 Http 接口,可以使用 Curl 等命令重试。如果你的服务使用 Dubbo ,这就需要使用到 Telnet 命令。 0x01. telnet 进入 Dubbo 调试 通过以下指令,连接 Dubbo 服务。 telnet IP PORT #例如: telnet localhost 20880 Dubbo 版本需要大于 2.0.5,远程调用需要注意网络是否可用 连上之后,按下 回车键 将会进入以下页面: 这个界面与 Shell 类似,需要我们输入相关命令。例如: 命令参考手册: http://dubbo.apache.org/zh-cn/docs/user/references

xLua 调试

时光总嘲笑我的痴心妄想 提交于 2020-02-05 03:15:03
准备工作 调试代码下载 生成调试配置 这里很多同学出现过一个问题,就是同时下载了很多的lua 调试插件,所以这里需要注意 如果使用luaide进行lua调试, 需要先禁用或卸载其他的lua调试插件. 步骤: 如果你没有生成过调试配置 那么先生成 演示 演示 演示 xlUA 如果你已经有调试配置了可修改/删除工作目录下的 .vscode/launch.json 根据调试需要选择本地或者远程调试即可 attach 远程调试 Unity 调试都为远程调试 不分平台请注意 { "name": "Unity-xlua", "type": "lua", "request": "attach", "runtimeType": "Unity", "localRoot": "${workspaceRoot}", "fileExtname": ".txt", "port": 7003, "printType": 1 } name:命名调试器选择项名字 type: 默认配置不需要修改 request:默认配置不需要修改 runtimeType:默认配置不需要修改 localRoot: 与本地调试不同,远程调试 localRoot 当做scriptMap 一般情况下默认为 ${workspaceRoot} 即可,如果你的代码目录是 ${workspaceRoot} 下载的某个路径 也可明确指定 如 $

SLua 调试

ε祈祈猫儿з 提交于 2020-02-05 03:08:29
准备工作 调试代码下载 生成调试配置 这里很多同学出现过一个问题,就是同时下载了很多的lua 调试插件,所以这里需要注意 如果使用luaide进行lua调试, 需要先禁用或卸载其他的lua调试插件. 步骤: 如果你没有生成过调试配置 那么先生成 演示 演示 演示 Slua 如果你已经有调试配置了可修改/删除工作目录下的 .vscode/launch.json 根据调试需要选择本地或者远程调试即可 attach 远程调试 Unity 调试都为远程调试 不分平台请注意 { "name": "Unity-slua", "type": "lua", "request": "attach", "runtimeType": "Unity", "localRoot": "${workspaceRoot}", "fileExtname": ".txt", "port": 7003,ke "printType": 1 } name:命名调试器选择项名字 type: 默认配置不需要修改 request:默认配置不需要修改 runtimeType:默认配置不需要修改 localRoot: 与本地调试不同,远程调试 localRoot 当做scriptMap 一般情况下默认为 ${workspaceRoot} 即可,如果你的代码目录是 ${workspaceRoot} 下载的某个路径 也可明确指定 如 $

Android虚拟机调试android.view.InflateException: Binary XML file line #0: Error inflating class

纵饮孤独 提交于 2020-02-05 00:38:03
前言 以往调试app都是在 真机 上调试,没有出现过问题。今天一时兴起,想在 Genymotion虚拟机 上调试安卓app,结果出现了意想不到的困难。换了好几个项目,结果都是 app可以安装,但无法运行,一点开app就闪退(已停止运行)。查看日志,有如下提示 android.view.InflateException: Binary XML file line #0: Error inflating class <unknown> 根据这个错误提示中的XML,我感觉是XML文件出了问题,于是百度搜索 部分参考资料如下: 1.检查 XML 代码是否有语法错误 如果XML代码有误,AS无法检测出来的时候,运行app时会出现错误 2.XML中自定义view的标签使用错误。标签的格式应该是 包名 + . + 类名 直接复制粘贴的代码容易出错,记得先检查类的全路径是否正确。 3.检查布局中 background 属性是否引用了不兼容 API level 的样式,通常在 4.4 系统容易遇到一些只兼容 21 不兼容 19 的样式问题 自行检查 4.检查资源文件是否引用错误 有时候在Android Studio中,虽然有出现资源文件的自动补全提示,但是运行却会出错,这种情况非常常见,因此可以考虑去除资源的引用后测试,例如去除background,color的引用,看看app还会不会出错。

网络编程--杂识

天大地大妈咪最大 提交于 2020-02-04 23:46:02
/*--> */ /*--> */ 协议 ---- 乃是数据传输时要遵守的格式要求 两种常见的程序架构是 C/S 和 B/S 架构 C/S :优点,性能稳定,协议选用灵活,适用于大量数据缓存,尤以游戏较为常见 安装在用户电脑上,可能会对用户安全造成影响 开发效率方面,开发团队需编写服务端和客户端两端代码,联合调试是一场噩梦 B/S : 减少了厂商植入恶意插件的可能,相比 C/S 减少 1/3 工作量 ; 跨平台 必须支持 HTTP 协议,须不折不扣的支持 不支持庞大数据缓存 OSI 七层模型(物数网传会表应),除了 TCP 协议工作在传输层, /IP 协议工作在网络层,基本上说的出来的协议都工作在应用层 × 额外的知识模拟电路信号向数字信号的转换 物理层,这一层数据单位是比特(物理传输层) 数据链路层:定义 格式化数据,以帧为单位传输数据 网络层:不同位置,不同主机之间的链接 传输层 : 端口号和进程,对下层接收的数据进行分段和传输,到达目的地之后重组,这一层数据称之为段。 会话层:通过传输层建立,不同系统间的通信(通过 IP 或 MAC ) 表示层:确保不同系统应用层数据能相互理解,读取,如有可能,这层会有个通用格式来完成不同格式数据的转换 应用层:为用户程序提供网络服务 数据包的封装 由于协议的存在,实际发送的数据层层封装,原始数据上套上应用层…然后逐一套上传输,网络

Java Agent 调试,Java agent debug

∥☆過路亽.° 提交于 2020-02-03 02:09:52
Java Agent 调试,agent debug 一、简介 Java agent 是在另外一个 Java 应用(“目标”应用)启动之前要执行的 Java 程序,这样 agent 就有机会修改目标应用或者应用所运行的环境。修改环境的时候做到对于项目中的代码没有入侵性,不需要修改老项目代码即可实现想要的能力,比如常见的skywoking,就是通过这样的方式实现的。比如这篇文章 通过修改字节码实现Java Agent 通过使用 Byte Buddy,便捷地创建 Java Agent 。还有一些功能,比如热更新、arthas 替换class字节码等等。 问题 Java agent的实现原理是什么? Java agent 如何调试呢?习惯了现在的直接代码调试?对于agent 有点慌。 二、原理 Java agent 主要是通过Instrumentation实现的。 Instrumentation 简介 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义