- •. Отладка компьютерных программ
- •Отладка программ
- •Метод поиска дефекта, основанный на научном методе
- •Инструменты отладки программ
- •Утилиты сравнения исходного кода (diff)
- •Утилиты сравнения исходного кода (diff) (пример)
- •Утилиты сравнения исходного кода (diff) (пример)
- •Системы управления версиями
- •Типичный порядок работы с системой управления версиями
- •Существующие системы управлениями версиями
- •Хостинг систем управления версиями
- •Компилятор
- •Процесс преобразования исходных кодов в машинные кода из исходного
- •Советы по устранению синтаксических ошибок
- •Советы по устранению синтаксических ошибок
- •Советы по устранению синтаксических ошибок
- •Советы по устранению синтаксических ошибок
- •Советы по устранению
- •Советы по устранению синтаксических
- •Советы по устранению синтаксических ошибок
- •Отладка с помощью отладочных сообщений
- •Использование отладочных сообщений
- •Технические аспекты, связанные с отладочными сообщениями
- •Программные отладчики
- •Программные отладчики (2)
- •В защиту программных отладчиков
- •Стандарт оформления кода (Code convention)
- •Существующие стандарты оформления кода на языке Си
- •Соглашение об оформлении кода на языке Си
- •Отступы (http://en.wikipedia.org/wiki/Indent_style)
- •Отступы (правила использования)
- •Отступы
- •Расположение фигурных скобок (http://en.wikipedia.org/wiki/Indent_style)
- •Расположение фигурных скобок (Исключение 1)
- •Расположение фигурных скобок (Исключение 2)
- •Имена переменных
- •Комментарии
Хостинг систем управления версиями
•SourceForge (Subversion, Git, Mercurial,
Bazaar, CVS)
•Google Code (Subversion, Git и
Mercurial)
•GitHub (Git)
•Codebase
•Tigris.org
11
Компилятор
•Компилятор
–Программа, переводящая текст программы на языке высокого уровня в эквивалентную программу на машинном языке.
•Компиляция
–трансляция программы на язык, близкий к машинному, и последующая её компоновка.
–трансляция программы, составленной на исходном языке, в объектный модуль (осуществляется компилятором) и последующая её компоновка в готовый к использованию программный модуль.
12
Процесс преобразования исходных кодов в машинные кода из исходного
prog1.c |
prog1.i |
prog1.o |
препроцессорная |
компиляция и |
|
обработка |
компоновка |
|
progN.c |
progN.i |
progN.o |
Редактирова ние связей (linking)
program
(исполняемый
(бинарный) файл) ….
03 30 01 03 20 02
01
03 10 02
02
03 02 40
……
13
Советы по устранению синтаксических ошибок
Внимательно читайте сообщения, выводимые компилятором!
14
Советы по устранению синтаксических ошибок
#iclude <stdio.h> int main()
{
int x;
...
$ gcc -o error1 error1.c
error1.c:1: error: invalid preprocessing directive #iclude
error1.c: In function ‘main’: error1.c: In function ‘main’:
error1.c:6: warning: incompatible implicit declaration of built-in function ‘scanf’
error1.c:10: warning: incompatible implicit declaration of built-in function ‘printf’
15
Советы по устранению синтаксических ошибок
Не полагайтесь на номера строк в сообщениях компилятора.
компилятор Си является однопроходным. Он читает программу сверху вниз и никогда не возвращается назад.
Поэтому иногда он обнаруживает ошибку в строке, располагающейся после той, что действительно содержит ошибку.
•Если компилятор сообщил о загадочной синтаксической ошибке, изучите фрагменты, расположенные прямо перед ошибкой.
•Обнаружив истинный дефект попробуйте определить почему компилятор указал не на ту команду. Понимание особенностей компилятора поможет находить дефекты в
будущем.
16
Советы по устранению синтаксических ошибок
Не доверяйте второму сообщению об ошибке
•Некоторые компиляторы обнаружив множественную ошибку выводят десятки бессмысленных сообщений о других ошибках
17
Советы по устранению
синтаксических ошибок
Не доверяйте второму сообщению об ошибке
#include <stdio.h> int main()
{
int x, y; if(y == 0) x = 10;
}
scanf("%d",&x); if( x > 5 )
x = 5;
printf("x = %d", x);
}
18
Советы по устранению синтаксических
ошибок
Не доверяйте второму сообщению об ошибке
$ gcc -o error2 error2.c
error2.c:10: error: expected declaration specifiers or ‘...’ before string constant
error2.c:10: error: expected declaration specifiers or ‘...’ before ‘&’ token
error2.c:10: warning: data definition has no type or storage class error2.c:10: error: conflicting types for ‘scanf’
error2.c:10: note: a parameter list with an ellipsis can’t match an empty parameter name list declaration
error2.c:11: error: expected identifier or ‘(’ before ‘if’ error2.c:15: error: expected declaration specifiers or ‘...’ before string constant
error2.c:15: error: expected declaration specifiers or ‘...’ before ‘x’
error2.c:15: warning: data definition has no type or storage class error2.c:15: error: conflicting types for ‘printf’
error2.c:15: note: a parameter list with an ellipsis can’t match an empty parameter name list declaration
error2.c:16: error: expected identifier or ‘(’ before ‘}’ token
19
Советы по устранению синтаксических ошибок
#include <stdio.h> int main()
{
int x, y; //if(y == 0)
//x = 10;
//}
scanf("%d",&x); if( x > 5 )
x = 5;
printf("x = %d", x);
}
•Разделение программы на части особенно эффективно при поиске синтаксических ошибок.
•Если вы столкнулись с неуловимой синтаксической ошибкой — закомментируйте часть кода и перекомпилируйте программу.
•Если ошибка исчезнет — ее нужно искать в этой части кода
20