打印监控源码
Ⅰ 快速学习单片机编程的方法
单片机汇编语言编程规范
软件设计更多地是一种工程,而不是一种个人艺术。如果不统一编程规范,最终写出的程序,其可读性将较差,这
不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。分析表明,编码
阶段产生的错误当中,语法错误大概占20%左右,而由于未严格检查软件逻辑导致的错误、函数(模块)之间接口错误
及由于代码可理解度低导致优化维护阶段对代码的错误修改引起的错误则占了一半以上。可见,提高软件质量必须降低
编码阶段的错误率。如何有效降低编码阶段的错误呢?这需要制定详细的软件编程规范,并培训每一位程序员,最终的
结果可以把编码阶段的错误降至10%左右,同时也降低了程序的测试费用,效果相当显着。
本文从代码的可维护性(可读性、可理解性、可修改性)、代码逻辑与效率、函数(模块)接口、可测试性四个方
面阐述了软件编程规范,规范分成规则和建议两种,其中规则部分为强制执行项目,而建议部分则不作强制,可根据习
惯取舍。
1.排版
规则 1
程序块使用缩进方式,函数和标号使用空格缩进,程序段混合使用TAB 和空格缩进。缩进的目的是使程序结构清晰,便
于阅读和理解。
<TAB>默认宽度应为8 个空格,由于Word 中<TAB>为4 个空格,为示范清晰,此处用2 个<TAB>代替(下同)。
例如:
MOV R1, #00H
MOV R2, #00H
MOV PMR, #PMRNORMAL
MOV DPS, #FLAGDPTR
MOV DPTR, #ADDREEPROM
read1kloop:
read1kpage:
INC R1
MOVX A, @DPTR
MOV SBUF, A
JNB TI, $
CLR TI
INC DPTR
CJNE R1, #20H, read1kpage
INC R2
MOV R1, #00H
CPL WDI
CJNE R2, #20H, read1kloop ;END OF EEPROM
规则2
在指令的操作数之间的,使用空格进行间隔,采用这种松散方式编写代码的目的是使代码更加清晰。
例如:
CJNE R2, #20H, read1kloop ;END OF EEPROM
规则 3
一行最多写一条语句。
规则 4
变量定义时,保持对齐。便于阅读和检查内存的使用情况。
例如:
RegLEDLOSS EQU 30H ; VARIABLE ;
TESTLED==RegLEDLOSS.0
RegLEDRA EQU 31H ; VARIABLE
RUNLED_Flag EQU 32H ; VARIABLE ;
256ms 改变一次RUNLED 状态
RUNLED_Def EQU 10H ; STATIC ;
16*32ms=500ms 改变一次LED 状态
2.注释
注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,太少不利于代码理解,太多则会对阅读产生干扰,
因此只在必要的地方才加注释,而且注释要准确、易懂、尽可能简洁。注释量一般控制在30%到50%之间。
规则 1
程序在必要的地方必须有注释,注释要准确、易懂、简洁。
例如如下注释意义不大:
MOV DXCE1COUNTER, #00H ; 将DXCE1COUNTER 赋值为0
而如下的注释则给出了额外有用的信息:
JNZ PcComm_Err ; 假如校验出错
规则 2
注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放
于上方则需与其上面的代码用空行隔开。
规则 3
头文件、源文件的头部,应进行注释。注释必须列出:文件名、作者、目的、功能、修改日志等。
规则 4
函数头部应进行注释,列出:函数的目的、功能、输入参数、输出参数、涉及到的通用变量和寄存器、调用的其他函数
和模块、修改日志等。对一些复杂的函数,在注释中最好提供典型用法。
规则 5
对重要代码段的功能、意图进行注释,提供有用的、额外的信息。并在该代码段的结束处加一行注释表示该段代码结束。
规则 6
对于所有的常量,变量,数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,在声明时都必
须加以注释,说明其含义。
规则 7
维护代码时,要更新相应的注释,删除不再有用的注释。保持代码、注释的一致性,避免产生误解。
3.命名
规则 1
标识符缩写
形成缩写的几种技术:
1) 去掉所有的不在词头的元音字母。如screen 写成scrn, primtive 写成prmv。
2) 使用每个单词的头一个或几个字母。如Channel Activation 写成ChanActiv,ReleaseIndication 写成RelInd。
3) 使用变量名中每个有典型意义的单词。如Count of Failure 写成FailCnt。
4) 去掉无用的单词后缀 ing, ed 等。如Paging Request 写成PagReq。
5) 使用标准的或惯用的缩写形式(包括协议文件中出现的缩写形式)。
如 BSIC(Base Station Identification Code)、MAP(Mobile Application Part)。
关于缩写的准则:
1) 缩写应该保持一致性。如Channel 不要有时缩写成Chan,有时缩写成C
h。Length 有时缩写成Len,有时缩写成len。
2) 在源代码头部加入注解来说明协议相关的、非通用缩写。
3) 标识符的长度不超过12 个字符。
规则 2
变量命名约定:<前缀> + 主体 ; 注释
变量命名要考虑简单、直观、不易混淆。
前缀是可选项,表示变量类型,由于汇编中变量多是单字节变量,所以单字节变量可以不加前缀,对于 bit 和双字节型
变量,使用小写的b 和d 作为前缀表示。
主体是必选项,可多个单词(或缩写)合在一起,每个单词首字母大写,其余部分小写。
规则 3
常量的命名
常量的命名规则:单词的字母全部大写,各单词之间用下划线隔开。
规则 4
函数的命名
单词首字母为大写,其余均为小写。函数名应以一个动词开头,即函数名应类似一个动词断语或祈使句。
例如:Test_Protect, Check_EEPROM, Init_Para
4.可维护性
规则 1
函数和过程中关系较为紧密的代码尽可能相邻。
规则 2
每个函数的源程序行数原则上应该少于200 行。对于消息分流处理函数,完成的功能统一,但由于消息的种类多,可能
超过200 行的限制,不属于违反规定。
规则 3
语句嵌套层次不得超过5 层。嵌套层次太多,增加了代码的复杂度及测试的难度,容易出错,增加代码维护的难度。
规则 4
避免相同的代码段在多个地方出现。当某段代码需在不同的地方重复使用时,应根据代码段的规模大小使用函数调用或
宏调用的方式代替。这样,对该代码段的修改就可在一处完成,增强代码的可维护性。
规则 5
每个函数完成单一的功能,不设计多用途面面俱到的函数。多功能集于一身的函数,很可能使函数的理解、测试、维护
等变得困难。使函数功能明确化,增加程序可读性,亦可方便维护、测试。
规则 6
在函数的项目维护文档中,应该指出软件适用的硬件平台及版本。
建议 1
使用专门的初始化函数对所有的公共变量进行初始化。
5.程序正确性、效率
规则 1
严禁使用未经初始化的变量。引用未经初始化的变量可能会产生不可预知的后果,特别是引用未经初始化的指针经常会
导致系统崩溃,需特别注意。
规则 2
防止内存操作越界。
说明:内存操作越界是软件系统主要错误之一,后果往往非常严重。
规则 3
注意变量的有效取值范围,防止表达式出现上溢或下溢。
规则 4
防止易混淆的指令和操作数拼写错误。
规则 5
避免函数中不必要语句,防止程序中的垃圾代码,预留代码应以注释的方式出现。程序中的垃圾代码不仅占用额外的空
间,而且还常常影响程序的功能与性能,很可能给程序的测试、维护等造成不必要的麻烦。
规则 6
通过对系统数据结构的划分与组织的改进,以及对程序算法的优化来提高空间效率。这种方式是解决软件空间效率的根
本办法。
规则 7
循环体内工作量最小化。应仔细考虑循环体内的语句是否可以放在循环体之外,使循环体内工作量最小,从而提高程序
的时间效率。
规则 8
在多重循环中,应将最忙的循环放在最内层。
规则 9
避免循环体内含判断语句,将与循环变量无关的判断语句移到循环体外。目的是减少判断次数。循环体中的判断语句是
否可以移到循环体外,要视程序的具体情况而言,一般情况,与循环变量无关的判断语句可以移到循环体外,而有关的
则不可以。
规则 10
中断和恢复
中断程序应该尽量短,应该在中断中进行标记,在主程序中处理。但实时性很高的程序段例外。
中断时应该保存所有涉及到的通用变量和寄存器,如 A, PSW, DPTR 等。
规则 11
堆栈设置
堆栈对于程序非常重要,对于堆栈的设置要合理。堆栈太小,在嵌套调用和容易溢出,造成系统故障;堆栈太大,浪费
RAM 资源。为了节约堆栈资源,中断时要求不要保存太多资源,中断嵌套和程序嵌套层数不要太多,尽量不要超过5
层。这就要求合理的划分功能模块。
规则 12
看门狗
看门狗电路用于在单片机死机时自动复位。单片机需要定时向看门狗发送脉冲,俗称”喂狗”。喂狗不可太勤,这样看门
狗没有起到作用;也不可太慢,这样容易造成单片机复位。正确的喂狗应该在主循环中进行,最好是建立一个独立的系
统监控进程。不可以在定时中断中喂狗,应为单片机有时可能会在主循环中死掉。
6.接口
规则 1
去掉没有必要的公共变量,编程时应尽量少用公共变量。公共变量是增大模块间耦合的原因之一,故应减少没必要的公
共变量以降低模块间的耦合度。应该构造仅有一个模块或函数可以修改、创建,而其余有关模块或函数只访问的公共变
量,防止多个不同模块或函数都可以修改、创建同一公共变量的现象。
规则 2
当向公共变量传递数据时,要防止越界现象发生。对公共变量赋值时,若有必要应进行合法性检查,以提高代码的可靠
性、稳定性。
规则 3
尽量不设计多参数函数,将不使用的参数从接口中去掉,降低接口复杂度,减少函数间接口的复杂度。
规则 4
对所调用函数的返回码要仔细、全面地处理。防止把错误传递到后面的处理流程。如有意不检查其返回码,应明确指明。
规则5
检查接口函数所有输入参数的有效性。
规则 6
检查函数的所有非参数输入,如外部数据、公共变量等。
7.代码可测性
规则 1
模块编写应该有完善的测试方面的考虑。
规则 2
源代码中应该设计了代码测试的内容。
在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码。程序的调试与
测试是软件生存周期中很重要的一个阶段,如何对软件进行较全面、高率的测试并尽可能地找出软件中的错误就成为很
关键的问题。因此在编写源代码之前,除了要有一套比较完善的测试计划外,还应设计出一系列代码测试手段,为单元
测试、集成测试及系统联调提供方便。
规则 3
在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应函数,并且要有详细的说明。
本规则是针对项目组或产品组的。
规则 4
在同一项目组或产品组内,调测打印出的信息串的格式要有统一的形式。信息串中至少要有所在模块名(或源文件名)
及行号。统一的调测信息格式便于集成测试。
规则 5
正式软件产品中应把调测代码去掉(即把有关的调测开关关掉)。
规则 6
用调测开关来切换软件的DEBUG 版和正式版,而不要同时存在正式版本和DEBUG 版本的不同源文件,以减少维护的
难度。
规则 7
在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。即有测试代码的软件和关掉测试代码的软
件,在功能行为上应一致。
规则 8
发现错误应该立即修改,并且若有必要记录下来。
规则 9
开发人员应坚持对代码进行彻底的测试(单元测试),而不依靠他人或测试组来发现问题。
规则 10
清理、整理或优化后的代码要经过审查及测试。
规则 11
代码版本升级要经过严格测试。
8.代码编译
规则 1
打开编译器的所有告警开关对程序进行编译。防止隐藏可能是错误的告警。
规则 2
某些语句经编译后产生告警,但如果你认为它是正确的,那么应通过某种手段去掉告警信息。照着规范系统的学习,不久的将来你也是个高手了。
Ⅱ 有哪个有监控打印机的源码
工作原理:PrintUsage由管理站点、中央数据库和监控服务三个模块组成。其中监控服务器需要安装到每一台打印服务器上,负责捕获每一次打印请求记录到中央数据库中,并且根据设定控制打印的进行。管理站点则以Web界面提供系统配置操作和查看日志报表,因此,在管理打印机这块,我们可以在世界的任何一个角落来进行,仅有一个前提,即要能上Internet。
提示:在安装管理站点模块时,必须事先安装IIS。
2. 安装与设置PrintUsage
双击下载的安装程序,经过几步常规的询问窗口并进行到“选择组件”一步,在此窗口中安装向导询问要安装哪些组件,因为现在安装的服务器就是打印服务器,而且以后的打印管理操作也是在这台服务器上进行,所以在此选择“完全安装”(注意:如果是多台打印服务器,只需要在一台打印服务器上安全安装,而其它打印服务上只要安装“打印监控服务”即可),再连续单击“下一步”按钮继续安装操作,当安装程序进行到“数据库类型及连接设置”一步时(如图1所示),如果所有的打印机不安装在同一台打印服务器上,此步选择数据库时就要注意了,必须选择“SQL Server7.0/2000或Oracle”等服务器了,而不能选择“Microsoft Access”数据库,不过此案例几台打印机都是安装在同一台打印服务器上,所以在此选择使用最方便的“Microsoft Access”数据库,然后单击“下一步”按钮,进入如图2所示的窗口。
图1 数据库类型及连接设置
在图2所示的窗口中要根据当前的网络情况进行选择:
图2 认证方式
如果你的网络中使用了域,那应该选择“按用户认证”项,然后设置本域中的用户或计算机,如果你的网络中没有使用域,那就选择“按计算机认证”。本案例中的网络没有使用域机制,在此选择“按计算机认证”选项,然后设置工作组等参数,再单击“下一步”按钮,并设置了允许的计算机和相应的打印机,再单击“下一步”按钮,进入打印机管理的默认模式设置窗口(如图3),设置好后系统就会以此默认值进行工作了。
图3 设置监控模式
选择“高级控制模式”,然后在“高级控制模式”框中设置“每张纸的成本为0.1元,每个用户配额10元钱(也就是每个用户可以打印100张纸),并将“配额周期类型”设置为“周”,这样默认情况下,每个用户每周最多只能打印100张纸了,当然你在安装时要根据你的实际情况设置此处的数值了。后面安装步骤中只要全部“下一步”或“是”即可完成程序的安装了,不过有一步需要设置管理账户,默认的管理账户名为“admin”,为了安全起见,我们给该管理账户设置了一个密码。程序安装完毕后会自动启动打印监控模块并缩小至任务栏的托盘区,针对这个打印监控模块无需要再进行设置,一切按其默认设置即可。
二、管理打印机
1. 进入管理界面
打开IE浏览器,然后输入“http://localhost/PrintUsage/Default.asp”打开管理主界面,在此页面右侧的登录框中输入“用户名”为“admin”及先前在安装步骤中设置的密码即可登录管理界面(如图4所示)。
图4 管理界面
2. 监控打印
采用本套系统的主要目的就是监控打印机的打印情况,监控模式设置当然是最重要的一个环节了。
第一步:单击“设置→监控模式”,然后在右侧窗口中选择“监视,并作高级控制”项。同时在此页面中还可以进行其它两种监控模式,为了精确实现监控目的,所以在此只选择了第三个选项。
第二步:单击“用户组→所有用户”,并在右侧窗口中一一对每个用户进行以下步骤的设置,单击“用户名”下面显示的用户,在切换的页面中:
打印机设置
点击“打印机”,在切换到的页面中,左边的列表窗口中是受限打印机(也就是该打印机不授权给该用户),而右侧列表窗口中的则是授权打印机。我们可根据打印机的类型和员工打印的实际需要情况进行一番最合适的配置,配置完毕后,单击“保存配置”按钮保存设置即可。这样,那些被配置了只能打印文档的针式打印机的员工就无法使用喷墨打印机了。
说明:因为公司有激光打印机、喷墨打印机及针式打印机,而不同的员工所需要的打印机类型也不同,比如只需要打印一些文档的员工,分配针式打印机给他就行了,没必要分配使用价格昂贵的喷墨打印机。
监控时间设置
此项是设置系统开始监控的时间,为了防止他人打印而不惜“加班加点”,我们可将监控时间设置为“全日制”了,让系统每天24小时进行监控,设置方法很简单:单击“监控时间”项,然后选择“监控”选项,最后单击“保存设置”即可。
文件类型设置
文件类型设置项是限制某些用户“乱打”现象的一个有效手段。例如,员工A只负责文档打印,而他根本就不需要进行高浪费模式的图片打印,此时,就可以给员工A分配打印的文件类型为“.txt”(记事本文档)或“.doc”(Word文档)。设置方法很简单:单击“文件类型”项,然后在切换到的页面中选择“允许所有文件类型”项,再将右侧列表窗口中的其它不让员工A打印的文件类型通过“添加”按钮转到左侧窗口中进行保护即可。另外,下面还可以设置打印某个文件时,文件大小不能超过多少KB、打印的页数不超过多少页等,花点时间根据每个员工的实际情况进行了精确的设置,最后单击“保存设置”按钮完成此项设置。
用户配额设置
“配额设置”也是件比较重要的设置,在安装程序时默认给每个用户都分配了10元钱的配额,这个分配方案有点欠妥,所以下面调整一下。
单击“用户配置”项,然后在“配额设置”项下面设置配额数量、配额周期,另外,根据实际情况还设置了该员工是否可以透支,并设置了最大透支值,设置完毕后同样单击“保存配置”按钮将设置保存起来了。
对每个用户都进行了上面的几步设置,最后进行一下全局浏览,看看有没有设置不妥之处,确保无误后,退出管理界面。
三、分析和总结
一段时间之后,我们来检查一下打印情况,单击页面左侧部分的“报表”项在此可以方便地查看分析结果(如图5)。
图5 查看分析结果
1. 排名统计:此项分析结果可以清楚地看到这些天员工们打印数量的多少,打印任务的多少,打印机工作量的多少等,并且以图表的方式直观地显示出了等级。
2. 汇兑统计:此项可以进行汇总分析、统计并且以表格的方式清晰的表现出分析结果,让你一目了然。
3. 费用分析:此项是分析这段时间的打印费用情况,可以分别以“打印单价”和“打印费用统计”两种形式给出费用分析结果。
4. 任务分析:此项可以帮助你分析出“文件类型打印统计”(这段时间打印了哪些文件,图片、文档还是其它)、“打印的页面数统计”(分析这段时间一共打印了多少页等)、“纸张大小统计”、“打印色彩分析”及“打印方式统计”等。
通过上面的四大分析功能,我们对打印机的使用情况掌握得清清楚楚:谁打印了文档、打印了什么文档、打印了多少页、使用哪台打印机等。掌握了这些资料,进而分析打印机使用情况,对公司控制办公打印成本大有好处。
这个是不是我也不知道你看看吧,http://newasp.net/Code/softdown.asp?softid=2044
Ⅲ 网络公司如何防止员工离职造成源码泄露
签保密协议后可以对员工有一定的心理作用,但实际员工拷走源码公司也很难找到证据。
可以使用技术手段对公司的源码进行加密,但完全不影响编译调试和运行,源码在创建时就加密,之后全程加密,只有在公司的电脑上才能调试运行发布,在公司以外的电脑上编译器打开源码都是乱码,我司的防泄密系统具有强制加密,透明解密特性,非常适合源码的防泄露。
Ⅳ 怎么排查这些内存泄漏
最原始的内存泄露测试
重复多次操作关键的可疑的路径,从内存监控工具中观察内存曲线,是否存在不断上升的趋势且不会在程序返回时明显回落。
这种方式可以发现最基本,也是最明显的内存泄露问题,对用户价值最大,操作难度小,性价比极高。
MAT内存分析工具
2.1 MAT分析heap的总内存占用大小来初步判断是否存在泄露
在Devices 中,点击要监控的程序。
点击Devices视图界面中最上方一排图标中的“Update Heap”
点击Heap视图
点击Heap视图中的“Cause GC”按钮
到此为止需检测的进程就可以被监视。Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断:
进入某应用,不断的操作该应用,同时注意观察data object的Total Size值,正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况。
所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;反之如果代码中存在没有释放对象引用的情况,则data object的Total Size值在每次GC后不会有明显的回落。随着操作次数的增多Total Size的值会越来越大,直到到达一个上限后导致进程被杀掉。
2.2 MAT分析hprof来定位内存泄露的原因所在。
这是出现内存泄露后使用MAT进行问题定位的有效手段。
A)Dump出内存泄露当时的内存镜像hprof,分析怀疑泄露的类:
B)分析持有此类对象引用的外部对象
C)分析这些持有引用的对象的GC路径
D)逐个分析每个对象的GC路径是否正常
从这个路径可以看出是一个antiRadiationUtil工具类对象持有了MainActivity的引用导致MainActivity无法释放。此时就要进入代码分析此时antiRadiationUtil的引用持有是否合理(如果antiRadiationUtil持有了MainActivity的context导致节目退出后MainActivity无法销毁,那一般都属于内存泄露了)。
2.3 MAT对比操作前后的hprof来定位内存泄露的根因所在。
为查找内存泄漏,通常需要两个 Dump结果作对比,打开 Navigator History面板,将两个表的 Histogram结果都添加到 Compare Basket中去
A) 第一个HPROF 文件(usingFile > Open Heap Dump ).
B)打开Histogram view.
C)在NavigationHistory view里 (如果看不到就从Window >show view>MAT- Navigation History ), 右击histogram然后选择Add to Compare Basket .
D)打开第二个HPROF 文件然后重做步骤2和3.
E)切换到Compare Basket view, 然后点击Compare the Results (视图右上角的红色”!”图标)。
F)分析对比结果
可以看出两个hprof的数据对象对比结果。
通过这种方式可以快速定位到操作前后所持有的对象增量,从而进一步定位出当前操作导致内存泄露的具体原因是泄露了什么数据对象。
注意:
如果是用 MAT Eclipse 插件获取的 Dump文件,不需要经过转换则可在MAT中打开,Adt会自动进行转换。
而手机SDk Dump 出的文件要经过转换才能被 MAT识别,Android SDK提供了这个工具 hprof-conv (位于 sdk/tools下)
首先,要通过控制台进入到你的 android sdk tools 目录下执行以下命令:
./hprof-conv xxx-a.hprof xxx-b.hprof
例如 hprof-conv input.hprof out.hprof
此时才能将out.hprof放在eclipse的MAT中打开。
手机管家内存泄露每日监控方案
目前手机管家的内存泄露每日监控会自动运行并输出是否存在疑似泄露的报告邮件,不论泄露对象的大小。这其中涉及的核心技术主要是AspectJ,MLD自研工具(原理是虚引用)和UIAutomator。
3.1 AspectJ插桩监控代码
手机管家目前使用一个ant脚本加入MLD的监控代码,并通过AspectJ的语法实现插桩。
使用AspectJ的原因是可以灵活分离出项目源码与监控代码,通过不同的编译脚本打包出不同用途的安装测试包:如果测试包是经过Aspect插桩了MLD监控代码的话,那么运行完毕后会输出指定格式的日志文件,作为后续分析工作的数据基础。
3.2 MLD实现监控核心逻辑
这是手机管家内的一个工具工程,正式打包不会打入,BVT等每日监控测试包可以打入。打入后可以通过诸如addObject接口(通过反射去检查是否含有该工具并调用)来加入需要监控的检测对象,这个工具会自动在指定时机(如退出管家)去检测该对象是否发生泄漏。
这个内存泄露检测的基本原理是:
虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用必须和引用队列(ReferenceQueue)联合使用(在虚引用函数就必须关联指定)。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,自动把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。
基于以上原理,MLD工具在调用接口addObject加入监控类型时,会为该类型对象增加一个虚引用,注意虚引用并不会影响该对象被正常回收。因此可以在ReferenceQueue引用队列中统计未被回收的监控对象是否超过指定阀值。
利用PhantomReferences(虚引用)和ReferenceQueue(引用队列),当PhantomReferences被加入到相关联的ReferenceQueue时,则视该对象已经或处于垃圾回收器回收阶段了。
MLD监控原理核心
目前手机管家已对大部分类完成内存泄露的监控,包括各种activity,service和view页面等,务求在技术上能带给用户最顺滑的产品体验。
接下来简单介绍下这个工具的判断核心。根据虚引用监控到的内存状态,需要通过多种策略来判断是否存在内存泄露。
(1)最简单的方式就是直接在加入监控时就为该类型设定最大存在个数,举个例子,各个DAO对象理论上只能存在最多一个,因此一旦出现两个相同的DAO,那一般都是泄露了;
(2)第二种情况是在页面退出程序退出时,检索gc后无法释放的对象列表,这些对象类型也会成为内存泄露的怀疑对象;
(3)最后一种情况比较复杂,基本原理是根据历史操作判断对象数量的增长幅度。根据对象的增长通过最小二乘法拟合出该对象类型的增长速度,如果超过经验值则会列入疑似泄露的对象列表。
3.3 UIAutomator完成重复操作的自动化
最后一步就很简单了。这么多反复的UI操作,让人工来点就太浪费人力了。我们使用UIAutomator来进行自动化操作测试。
目前手机管家的每日自动化测试已覆盖各个功能的主路径,并通过配置文件的方式来灵活驱动用例的增删改查,最大限度保证了随着版本推移用例的复用价值。
至此手机管家的内存泄露测试方案介绍完毕,也欢迎各路牛人交流沟通更多更强的内存泄露工具盒方案!
腾讯Bugly简介
Bugly是腾讯内部产品质量监控平台的外发版本,其主要功能是App发布以后,对用户侧发生的Crash以及卡顿现象进行监控并上报,让开发同学可以第一时间了解到App的质量情况,及时机型修改。目前腾讯内部所有的产品,均在使用其进行线上产品的崩溃监控。
Ⅳ 如何有效的预防互联网公司的源代码泄露
1、入职员工签署保密协议,源文件的操作规范要做好
2、可以用虚拟桌面,这样可以减少一部分泄密风险
3、最好是部署成熟的防泄密软件,从代码加密、行为审计、权限控制三个举措来保护企业源代码
推荐下IP-guard
IP-guard拥有基于驱动层的透明加密功能,还可以审计大部分的泄密渠道,基于透明加密、行为审计、权限控制的三重保护措施,能为企业构建完善的防泄密体系。
IP-guard于2001年推出,推出18多年为超过全球20,000家知名企业提供过防泄密解决方案
除了能自动加密保护各种源代码,还能禁止外来的移动存储设备接入企业内网,对源代码的操作行为可以被详细监控,一旦发生泄密行为能立刻查找泄密源。
Ⅵ 欲使用串口监视器,需在代码中配置什么
调试器
20行代码实现(UartLogger)串口监控记录器
shine_blink
原创
关注
1点赞·851人阅读
文章目录
前言
一、UartLogger功能介绍
二、完整源代码
三、实验结果
四、更多花样
前言
shineblink core 开发板(简称Core)的库函数支持Uart功能,所以只需要调用两个API,即可实现Uart通信。
PS:Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/RS485/RS232通信、以及30多种传感器/10多种硬件外设/10多种Mcu内设功能,并且这些功能最多可以 5 种随机组合同时运行。更多关于Core的内容可以在 shineblink.com 上了解。
一、UartLogger功能介绍
我们在开发过程中,有时需要一个第三方的硬件工具(UartLogger)来监控串口Tx、Rx的具体通信内容,这时我们用Core就可以很容易实现这一目的。并且Core可以将监控到的Tx、Rx通信内容以各种形式输出或存储在Core的TF卡上。
下图举了一个典型的例子来诠释UartLogger的作用:
利用UartLogger我们就可以在开发ESP8266串口WIFI模块时,捕捉到MCU和ESP8266通信的具体内容。其他类似的场景只要是Uart接口,UartLogger都可以发挥其作用。
二、完整源代码
注意:本例中假设被监控的Uart口波特率是115200,实际波特率需要您自己调整。
--配置Core的USB接口作为虚拟串口连接电脑,打印输出UartLogger捕捉到的内容
--当然,您也可以配置成蓝牙输出,WIFI输出,看您心情了
LIB_UsbConfig("CDC_PD")
LIB_GpioOutputConfig("D8","STANDARD")
LIB_GpioOutputConfig("D9","STANDARD")
LIB_Uart0Config("BAUDRATE_115200")
LIB_Uart1Config("BAUDRATE_115200")
prefix0 = {13, 10, 82, 88, 48, 58, 13, 10} --"\r\nRX0:\r\n"
prefix1 = {13, 10, 82, 88, 49, 58, 13, 10} --"\r\nRX1:\r\n"
--开始大循环
while(GC(1) == true)
do
recv_flag0,recv_tab0 = LIB_Uart0Recv()
if recv_flag0 == 1 then
LIB_GpioToggle("D8") --LED1 Toggle
LIB_UsbCdcSend(prefix0)
LIB_UsbCdcSend(recv_tab0)--在串口终端上显示RX0引脚捕捉到的内容
end
recv_flag1,recv_tab1 = LIB_Uart1Recv()
if recv_flag1 == 1 then
LIB_GpioToggle("D9") --LED2 toggle
LIB_UsbCdcSend(prefix1)
LIB_UsbCdcSend(recv_tab1)--在串口终端上显示RX1引脚捕捉到的内容
end
end
登录后复制
三、实验结果
本实验中,我们捕捉和ESP8266串口WIFI模块的通信内容,并打印输出到终端软件上,下图为捕捉到的具体内容:
四、更多花样
将监控到的Tx、Rx通信内容存储在TF卡这一功能在找问题时非常方便,我们不用一直守着设备,而是在某个时间取出TF卡查看内容即可。
具体实现很简单,只需要将上面例程中的LIB_UsbCdcSend()函数换成LIB_Fwrite()即可,例如:
原代码
LIB_UsbCdcSend(prefix0)
LIB_UsbCdcSend(recv_tab0)--在串口终端上显示RX0引脚捕捉到的内容
LIB_UsbCdcSend(prefix1)
LIB_UsbCdcSend(recv_tab1)--在串口终端上显示RX1引脚捕捉到的内容
登录后复制
替换后的代码:
LIB_Fwrite("abc.txt", prefix0)
LIB_Fwrite("abc.txt", recv_tab0)--将RX0引脚捕捉到的内容存到TF卡上abc.txt文件中
LIB_Fwrite("abc.txt", prefix1)
LIB_Fwrite("abc.txt", recv_tab1)--将RX1引脚捕捉到的内容存到TF卡上abc.txt文件中
登录后复制
uart
syslog
mcu
单片机
调试器
平板电脑一般多少钱
精选推荐
广告
tty-logger-chrome:TTY UART记录器作为Chrome应用程序
0下载·0评论
2021年5月23日
行车记录仪USB
5431阅读·0评论·1点赞
2016年3月11日
UART Log
1475阅读·0评论·2点赞
2020年4月7日
【防扯皮】串口数据监听
4246阅读·1评论·0点赞
2021年9月26日
USBee Suite抓I2C; USBee示波器; USBee Suite抓上电时序; USBee Suite抓取UART; USBee Suite抓取SPI; 数据记录仪
1.5W阅读·0评论·1点赞
2010年11月10日
串口监视的源程序代码(C++)
741阅读·3评论·1点赞
2008年10月7日
想赚钱请记住!财商思维不可少!因你永远挣不到你认知范围以外的钱
00:47
12元学财商
广告
二次开发源码:串口监视(不占用串口).zip
20下载·0评论
2020年6月17日
ComSpy串口监视精灵 v1.2 中文绿色版_串口_
9下载·0评论
2021年10月1日
串口监控CommMonitor
62下载·4评论
2013年10月22日
串口监听工具的源代码
327下载·13评论
2014年11月1日
【经验分享】一个实用的C语言宏定义技巧写法
483阅读·1评论·1点赞
2022年6月30日
嵌入式基础--日志模块
792阅读·5评论·1点赞
2021年7月25日
ov7670 linux源码,摄像头二值化 STM32 ov7670源码
238阅读·0评论·0点赞
2021年5月15日
易语言 串口控制 源码 串口控制写好了 ,就可以轻松地控制电力仪表 信号采集 单片机等 信号
574阅读·0评论·0点赞
2022年7月29日
串口记录仪,附有原理设计
14下载·0评论
2020年4月28日
串口监听(包含实例代码与讲解)
74下载·5评论
2010年5月21日
OpenLog 是一款开源数据记录器,可通过简单的串行连接工作,并支持高达 64GB 的 microSD_C++_代码_下载
0下载·0评论
2022年7月4日
去首页
看看更多热门内容