Что такое параметр проверки жизненного цикла разработки безопасности в Visual Studio?

81

Я использую предварительную версию Visual Studio 2013, хотя уверен, что видел ее в более ранних версиях. При создании нового проекта с помощью мастера я выбираю C ++, консольное приложение Win32, и есть возможность включить проверку жизненного цикла разработки безопасности в моем проекте. Может ли кто-нибудь объяснить, что именно эта опция делает с моим кодом / проектом?

Нил Кирк
источник

Ответы:

71

Описание /sdlпереключателя здесь . Некоторые предупреждения превращаются в ошибки, что не влияет на ваш код. Кроме того, он /GSболее агрессивно применяет проверку.

Не ждите от этого слишком многого. Microsoft SDL - это действительно обходной путь для программирования в стиле C 1980-х годов. Даже если вы используете C ++ 20 века, он вам не нужен. Например, operator+(std::string, std::string)он безопасен и портативен. Решение Microsoft SDL здесь, напротив, непереносимо и небезопасно - идея /GSзаключается в том, чтобы найти ошибки при обработке строки C во время выполнения и прервать выполнение программы, ограничив последствия, но не сделав ее безопасной.

MSalters
источник
Строки - не единственная причина ошибок памяти. / sdl, среди прочего, может помочь вам определить использование унифицированных переменных.
Jørgen Fogh
@ JørgenFogh: Вы описываете предупреждение C4700, для которого вам не нужен / sdl. Это предупреждение уровня 1; вам необходимо отключить все предупреждения, прежде чем C4700 исчезнет. Если ваши разработчики так поступают, у вас есть проблемы, которые SDL тоже не решит.
MSalters 03
Я помню, как где-то читал, что предупреждения становятся более подробными, потому что / sdl включает более подробный статический анализ. Я не могу вспомнить, где я это читал.
Jørgen Fogh
3
Выполняет ограниченную очистку указателя. В выражениях, которые не включают разыменование, и в типах, не имеющих определяемого пользователем деструктора, ссылки указателя устанавливаются на недопустимый адрес после вызова удаления. Это помогает предотвратить повторное использование устаревших ссылок на указатели. Выполняет инициализацию члена класса. Автоматически инициализирует все члены класса нулями при создании экземпляра объекта (перед запуском конструктора). Это помогает предотвратить использование неинициализированных данных, связанных с членами класса, которые конструктор не инициализирует явно.
Motes
1
@Motes: Вы должны были написать это как отдельный ответ. Это гораздо полезнее, чем (насмешливый) ответ, для которого предназначен этот комментарий. Кроме того, приведенная там ссылка плохая. Так и должно быть .
ahmd0
2

Жизненный цикл разработки безопасности Microsoft - это процесс разработки программного обеспечения, который используется и предлагается Microsoft для снижения затрат на обслуживание программного обеспечения и повышения надежности программного обеспечения в отношении ошибок, связанных с безопасностью программного обеспечения.

Это может быть полезно:

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

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

Мохаммад Изади
источник
10
Это много материала. Что на самом деле ДЕЛАТЬ с моим кодом?
Нил Кирк