什么是Visual Studio中的“安全开发生命周期检查”选项?


81

我正在使用Visual Studio 2013预览版,尽管我确定我已经在早期版本中看到了它。使用向导创建新项目时,我选择C ++,Win32控制台应用程序,并且有一个选项可以在我的项目上启用“安全开发生命周期检查”。有人可以确切说明此选项对我的代码/项目有何作用?

Answers:


71

此处/sdl描述该开关。它将一些警告变成错误,这不会影响您的代码。此外,它/GS更加激进地应用了检查。

不要期望太多。Microsoft SDL实际上是1980年代C风格编程的一种解决方法。即使您使用20世纪C ++,也不需要它。例如operator+(std::string, std::string),既安全又便携式。相比之下,Microsoft的SDL解决方案不是可移植的,也不是安全的-背后的想法/GS是在运行时发现C字符串处理错误并中止程序,从而限制了后果,但并不安全。


字符串不是内存错误的唯一原因。/ sdl可以帮助您识别使用统一变量的方法。
约尔根·福格·

@JørgenFogh:您正在描述C4700警告,您不需要/ sdl。这是1级警告;您需要在C4700消失之前关闭所有警告。如果您的开发人员正在这样做,那么您将遇到SDL无法解决的问题。
MSalters '16

我记得在某处读过警告变得更加详细,因为/ sdl启用了更详细的静态分析。我不记得我在哪里读它。
约尔根·福

3
执行有限的指针清理。在不涉及取消引用的表达式中以及在没有用户定义的析构函数的类型中,指针引用在调用delete之后被设置为无效地址。这有助于防止过时的指针引用重复使用。执行类成员初始化。在对象实例化时自动将所有类成员初始化为零(在构造函数运行之前)。这有助于防止使用与构造函数未明确初始化的类成员相关联的未初始化数据。
2016年

1
@Motes:您应该将其写为单独的答案。这比放置此评论的(确定性)答案更有帮助。另外,给定的链接是错误的。它应该是这样
ahmd0

2

Microsoft安全开发生命周期是Microsoft使用并提出的一种软件开发过程,可以减少软件维护成本并提高与软件安全相关的bug相关的软件可靠性。

这些可能会有所帮助:

http://download.microsoft.com/download/B/5/A/B5A89F4C-D591-4AAB-BF45-D818D80527B6/SDLServices2011.pdf

http://msdn.microsoft.com/zh-CN/library/windows/desktop/84aed186-1d75-4366-8e61-8d258746bopq.aspx


10
大量的材料。检查选项实际上对我的代码有什么作用?
尼尔·柯克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.