使用代码分析来分析托管代码质量 之 CA2200
vs的代码分析功能:vs菜单 “生成”下面有“对解决方案运行代码分析 Alt+F11”和“对[当前项目]运行代码分析”2个子菜单。
使用这个功能,可以对托管代码运行代码分析,发现代码中的缺陷和潜在问题,据此分析结果我们可以对程序做相应优化调整。

常见的分析类别有:
- Usage---使用冲突
- Security---如不安全的数据访问,sql注入
- Design----设计问题

来看几个代码分析结果。




下面针对分析结果“CA2200 再次引发以保留堆栈详细信息”做个小述。
具体可见msdn:《CA2200: Rethrow to preserve stack details》
当一个异常被抛出时,这个异常通常包含其详细的堆栈跟踪信息。一个完整的堆栈跟踪是方法调用层次结构的列表,从引发该异常的方法开始,一直到捕获到该异常的方法为止。
CA2200是什么?
CA2200可不是国航航班哦~
CA2200是一个规则,这个规则是说,你如果在代码中捕获了某异常,并且在catch里(做相应处理比如记录日志后)又把这个异常实例throw出去重新引发该异常,那么,这种情况下,堆栈跟踪是从throw语句开始的,而不是从引发该异常的原始代码行启动的。这将不利于我们对一些问题的排障。所以,CA2200建议我们,若要保留该异常的原始堆栈跟踪信息,就要在使用 throw 语句时不要指定该异常。
看下面的demo示例:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System; namespace UsageLibrary
{
[TestClass]
public class TestsRethrow
{
[TestMethod]
public void CatchException()
{
try
{
CatchAndRethrowExplicitly();
}
catch (ArithmeticException e)
{
Console.WriteLine("Explicitly specified:{0}{1}",
Environment.NewLine, e.StackTrace);
} try
{
CatchAndRethrowImplicitly();
}
catch (ArithmeticException e)
{
Console.WriteLine("Implicitly specified:{0}{1}",
Environment.NewLine, e.StackTrace);
}
} void CatchAndRethrowExplicitly()
{
try
{
ThrowException();
}
catch (ArithmeticException e)
{
// Violates the rule.
throw e;
}
} void CatchAndRethrowImplicitly()
{
try
{
ThrowException();
}
catch (ArithmeticException e)
{
// Satisfies the rule.
throw;
}
} void ThrowException()
{
throw new ArithmeticException("illegal expression");
}
}
}
执行代码,运行结果为:

使用代码分析来分析托管代码质量 之 CA2200的更多相关文章
- 打造smali代码库辅助分析
打造smali代码库辅助分析 在分析Android应用程序的时候,我们往往会插入代码重打包apk来辅助我们分析的工作 一个比较取巧的方法就是先用java写好代码以及相关的调用之后, 然后直接扣出代码 ...
- Python之路,Day22 - 网站用户访问质量分析监测分析项目开发
Python之路,Day22 - 网站用户访问质量分析监测分析项目开发 做此项目前请先阅读 http://3060674.blog.51cto.com/3050674/1439129 项目实战之 ...
- [转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626) ADLab2019-03-15共23605人围观 ,发现 4 个不明物体安全报告漏洞 https://www.f ...
- CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析
漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...
- [Android6.0][RK3399] 双屏异显代码实现流程分析(一)【转】
本文转载自:http://blog.csdn.net/dearsq/article/details/55049182 Platform: RK3399 OS: Android 6.0 Version: ...
- [Swift通天遁地]七、数据与安全-(15)使用单元测试进行代码的性能分析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Android核心分析 之一分析方法论探讨之设计意图
为什么要研究Android,是因为它够庞大,它够复杂,他激起了我作为一个程序员的内心的渴望,渴望理解这种复杂性.我研究的对象是作为手机开发平台的Android软件系统部分,而不是Dalvik虚拟机本身 ...
- 转:[gevent源码分析] 深度分析gevent运行流程
[gevent源码分析] 深度分析gevent运行流程 http://blog.csdn.net/yueguanghaidao/article/details/24281751 一直对gevent运行 ...
- MapReduce源代码分析MapTask分析
前言 MapReduce该分析是基于源代码Hadoop1.2.1代码分析进行的基础上. 该章节会分析在MapTask端的详细处理流程以及MapOutputCollector是怎样处理map之后的col ...
随机推荐
- 使用.net备份和还原数据库
原文:使用.net备份和还原数据库 CSDN网友的提问http://community.csdn.net/Expert/TopicView3.asp?id=4929678C#实现SQLSERVER20 ...
- vs 中一些快捷键
本文用于记录一些vs中快捷键,以便提高编程效率. 首先小坦克的博客介绍的十几个快捷键挺不错的,还有动画演示.可以跳过去看看. 自己也记录一些自己想用的吧: 1. ctr + W + E 出现error ...
- 《互联网初创企业password》书评
今天试用了一下<互联网初创企业password>这本书.我觉得这本书开始的很真实,从学校刚毕业那会儿.它是生命,他们的牛b时间,一直想做点什么来证明自己.具体地,并且现在是在最好的时候.互 ...
- HTML 速成
html零基础者入. 记得学计算机网络的时候好像有学过一些HTML,但没运用起来都忘光了.近来想学学如何写网页.就从html(HyperText Markup Language超文本标记语言)入手了. ...
- 代码审查 (Google牛人谈Code Review)
代码审查 (Google牛人谈Code Review) 在上一篇博客里我暗示自己将不在为Google工作. 我还没有决定好去哪儿-有几个非常不错的工作机会让我选择.鉴于这段时间内我不受雇于任何公司,我 ...
- [置顶] 在js中如何实现方法重载?以及函数的参数问题
都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了. 但每一个函数都有一个特殊的参数argum ...
- .Net Attribute详解(一)
.Net Attribute详解(一) 2013-11-27 08:10 by JustRun, 1427 阅读, 14 评论, 收藏, 编辑 Attribute的直接翻译是属性,这和Property ...
- go语言defer使用
defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句.当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回.特别是当你在进行一些打开资源 ...
- [转]ARM64 Function Calling Conventions
from apple In general, iOS adheres to the generic ABI specified by ARM for the ARM64 architecture. H ...
- [google面试CTCI] 1-6.图像旋转问题
[字符串与数组] Q:Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, wr ...