- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试探索 VS 2013 中的静态代码分析选项。我在下面写了非常简单的代码
int main()
{
int a, b; //found unused variable
std::cout << "Hello world!";
std::cin >> a;
int* i = new int; // analysis didn't find this memory leak
//delete i;
//i = NULL;
}
当我在上面的 block 上运行代码分析时,我希望它找到 int* i = new int; 并警告内存泄漏,但它没有找到但找到未使用的变量 b。
所以现在我有点困惑,内存泄漏是 C/C++ 中最常见的错误,而且这个工具找不到它。现在我的问题是我们是否可以依赖此分析?
环境:Windows 7,VS 旗舰版 2013。
最佳答案
这不是 /analyze
(又名 PREfast)旨在检测的那种代码问题。还有其他用于直接检测内存泄漏的常用工具,例如 CRT 调试堆——请参阅 MSDN .可以说,您应该首先使用像 std::unique_ptr
这样的 C++11 功能,永远不要 记住调用 delete
。
#include <memory>
int main()
{
int a, b; //found unused variable
std::cout << "Hello world!";
std::cin >> a;
auto i = std::make_unique<int>()
}
/analyze
的目的是提供一些您从 lint 等产品中获得的“额外警告”,但主要是为了进行过程间缓冲区大小验证通过 SAL 注释。
这是它发现的错误类型:
void someFunction(char *buffer, size_t len)
{
...
}
void otherFunction()
{
char buff[128];
someFunction(buff, 256);
}
当您添加传达指针和大小之间关系的所需 SAL 时:
void someFunction(_Out_writes_(len) char *buffer, size_t len)
确实很难发现违反并导致缓冲区溢出的假设链,而不是内存泄漏。
/analyze
的另一个有用功能是验证可变长度 printf 参数与格式字符串:
void printf_debug( _In_z_ _Printf_format_string_ const char* format, ... )
{
...
}
void otherFunction()
{
unsigned long l;
std::wstring str;
std::string str2;
...
printf_debug( "%i %s %d", i, str.c_str(), str2.c_str());
}
VS 2015 and VS 2017 now include a few of the warnings that used to be only in
/analyze
in VS 2013 or earlier like shadowed variables and basic printf validation (if you write your own printf-style functions, you should still use/analyze
with_Printf_format_string_
)./analyze
continues to provide SAL-based buffer analysis that is not part of the standard compiler.
/analyze
PREFast 技术可以在某些情况下检测潜在的内存泄漏(特别是 C++ 异常安全)、潜在空指针的解引用、使用未初始化的内存等。它还有很多额外的功能处理内核模式编码和编写驱动程序的规则,特别是跟踪锁、IRQL 级别等。
For C#,
/analyze
is the FXCop tool which is a code-analysis tool plus a 'style enforcer' for .NET.
关于c++ - visual studio 2013 静态代码分析——它的可靠性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42179745/
01、记录器的生命周期 Serilog 大多数情况下“只需使用”,并且在创建和处理日志记录器时不需要过多考虑。然而,由于以下原因: 某些接收器(sink)涉及后台进程,特别是那些使用网络的接收器;
有在项目中使用过Java Kryonet库的 friend 愿意分享一下经验吗?我看到它被推荐过几次,但实际上没有看到任何人谈论他们使用它的经历。 具体来说,我想确保它可靠且相对稳定。或者我应该考虑使
如果我不希望用户能够访问某个页面,我需要重定向用户。例如,header('Location: ../acc/login.php'); 有多可靠?浏览器可以忽略 302 错误吗,这是正确的方法吗?提前致
我一直在使用 ZeroMQ 的请求/响应套接字来在 Web 应用程序和用于卸载处理的从属应用程序之间交换消息。我注意到在某些情况下,并不是所有发送的 ZMQ 消息都被另一方实际接收到。更奇怪的是,即使
我目前的情况是我有一个应用程序需要在新数据到达数据库表时得到通知。数据来自外部来源(我无法控制——这是唯一的集成选项)。当新数据到达时,我的应用程序需要采取某些操作——基本上是查询新数据、处理它、将结
嗨 如果lucene索引上只发生插入操作(没有删除/更新),那么docID是否真的没有改变?而且它也可靠 如果这是真的,我想用它来增量加载 FieldCache 以降低加载所有文档的开销,最好的解决方
我正在尝试使用 ActiveMQ 创建可靠的 JMS 环境。我打算采用 JDBC 主从集群方法,在这种方法中,我可以将主服务器收到的消息保存到数据库中,从服务器可以选择这些消息并运行它们,以防主服务器
我正在开发依赖于设备 UUID 的 Apache Cordova 应用程序。几个问题在我脑海中闪过,但不幸的是,我似乎无法在任何地方找到答案。 获取的 device.uuid 对于每个平台是否都相同,
这个问题是对 Intercepting/Rerouting TCP SYN packets to C++ program in linux 的(某种)跟进. 问题是:如果 SYN 或任何其他 TCP
是否存在 localIdentifier 可能会更改或不准确的情况?我正在开发一个备份照片的应用程序,我的同事告诉我不能信任 localIdentifier。然而,在做了一些研究之后,我一直无法找到任
我们的应用程序使用 APNS 来接收推送通知。然而,我们的客户声称他们的一些设备没有收到通知,并争辩说他们“必须”确保通知 100% 送达。但我读过somewhere APNS 不是 100% 可靠的
来自ZooKeeper FAQ : Reliability: A single ZooKeeper server (standalone) is essentially a coordinator w
我正在制作一个需要存储一些用户数据的 PhoneGap 应用程序。在初始应用程序启动时,将要求用户输入 URL。由于 URL 可能很长,我希望将其保存在用户的设备上,这样他就不需要在每次启动应用程序时
我是 Node.js 的新手,目前正在质疑它的可靠性。 根据我目前看到的情况,似乎存在一个重大缺陷:任何 Uncaught Error /异常都会导致服务器崩溃。当然,您可以尝试对您的代码进行防弹或将
Google PubSub 是否适合小批量(10 条消息/秒)但任务关键型消息传递,保证在任何固定时间段内及时传递每条消息? 或者,它是否更适合高吞吐量,其中个别消息可能偶尔会丢失或无限期延迟? 编辑
Erlang据报道,它已在生产系统中使用了 20 多年,正常运行时间百分比为 99.9999999%。 我做了如下数学计算: 20*365.25*24*60*60*(1 - 0.999999999)
我最近看到this SO 发布有关获取请求域的文章。我想知道此信息是否可靠(即攻击者可以“伪造”此信息吗?)。具体来说,域和请求类型(GET、POST 等)。我问的原因是因为我不确定是否可以使用它来保
谁能告诉我,当将操作发布到时间轴时,Facebook 的开放图谱 API 的可靠性如何? 背景: 我创建了一个新的 FB iOS 应用 使用自定义对象“blogpost”创建新的操作类型“write”
我正在进行 Windows Azure 试用,以评估将多个商业 ASP.NET 站点从专用托管迁移到 Azure 的情况。一切都很顺利......直到现在! 一些背景 - 站点是使用 SQL Azur
在进行代码审查时我偶然发现了 GWM在 Java-Spring-GWT Web 应用程序中。由于我不知道这个产品,我访问了它的网站,发现它的开发似乎在 2007 年停止了,因为它的最后一个稳定版本是
我是一名优秀的程序员,十分优秀!