2011-01-13 2 views
0

Я получаю ошибку переполнения буфера в проекте, который преобразован из VS2005 в VS2008. Я хотел бы знать, есть ли какие-либо инструменты, которые могут помочь найти место переполнения буфера.Ошибка переполнения буфера в проекте, преобразованном из VS2005 в VS2008

+0

Да, отладчик работает хорошо. –

+0

Вы имеете в виду визуальный студийный отладчик? Глядя на стек вызовов, я мог бы сузить до модуля, где возникает ошибка. Но этот модуль все еще имеет много функций. Итак, есть ли способ указать функцию, которая генерирует ошибку? – Lakshmi

ответ

0

Предполагаю, что вы используете C++.

В microsoft C++ есть коммутатор компилятора /GS, чтобы узнать, есть ли переполнение буфера. Подробнее и как это работает, см. MSDN Compiler Security Checks In Depth.

По крайней мере, в C# -развитие (но, надеюсь, также в C++) есть опция отладчика «Перерыв, когда исключение ...», которое останавливает выполнение программы, если генерируется исключение (вызывают обнаружение среды выполнения C++ был переполнение буфера. в VS2010 это под Debug/исключения ...

Вы можете также использовать Microsofts PREfast, которая сканирует исходный код для потенциально небезопасных функций (STRCPY)

+0

не могли бы вы упомянуть, как использовать prefast для сканирования кода. – Lakshmi

+0

Нет, я не могу «упомянуть, как использовать prefast», потому что я только читал об этом, но не использовал его сам. – k3b

0

из-за разницы в behavoiur из Sprintf, а строка, отличная от нуля, была написана за пределами границ массива, что, в свою очередь, исказило стек и привело к запуску буфера./GS-переключатель в visual st udio сообщает о переполнении буфера и, таким образом, может помочь выяснить причину сбоя системы.

Смежные вопросы