Сайтостроительство

       

Ошибки инструментария и других компонентов системы


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

// bug BC++3.1 & MSVC++4.2 print 0, it is wrong

// watcom & others print 2, it is right

#include<stdio.h>

void main()

{

int x=10,y=8;

x>y?x-=y:y-=x;

printf("%d\n",x);

}

BorlandC3.1 и MSVisualC 4.2 выдавали ноль, а остальные компиляторы выдавали 2. Ниже идет пример еще одной, обнаруженной мной, ошибки для любителей C++

/*

msvc++5.0



*/

#include<new>

struct A{

};

typedef A TYPE;

typedef TYPE* pTYPE;

void main()

{

pTYPE p = new TYPE;

pTYPE* pp = (pTYPE*)new char[sizeof(pTYPE)];

new(pp) pTYPE(p);

//pp->~pTYPE(); // pp[0].~pTYPE(); // don't work, why?

pp[0].pTYPE::~pTYPE();

delete [] (char*)pp;

delete p;

}

Ну и чтобы совсем уж быть полным, приведу недавно обнаруженную мной ошибку в СУБД MySQL. Ее обещали исправить только в четвертой версии. Ниже приведены два SQL-запроса из программы анализа посетителей веб-сайта. Первый работает нормально. Второй очень похож на первый и полностью удовлетворяет синтаксису SQL. Но второй запрос MySQL отказывается выполнять и возвращает пустую таблицу.

SELECT COUNT(DISTINCT ip), COUNT(*), CONCAT(shref,href) FROM hit GROUP BY 3

SELECT COUNT(*), CONCAT(shref, href) FROM hit GROUP BY 2

После классификации ошибок давайте рассмотрим методы их поиска. В первую очередь, один простой и, казалось бы, очевидный совет: "надо думать, анализировать, почему программа не работает так, как было задумано, что надо в ней исправить". Никакой самый навороченный отладчик за вас ошибку не найдет. Никакая самая лучшая методика не найдет и не ускорит поиск ошибки, если вы не включите мозги по полной программе и не сосредоточитесь целиком и полностью на поимке ошибки. Итак, допустим вами, пользователем или тестирующим, было зафиксировано некорректное поведение программы. Что делать? Ниже перечислены методы в порядке их приоритетности, которые используют многие программисты.





Содержание раздела