C++ Программирование в среде С++ Builder 5

Предварительные шаги


Прежде всего, для исследования отладчика нам понадобится программа. В листинге 5.1 показана тестовая программа, вызывающая функции DoSomeMath () и DoSort () . Первая из них довольно бессмысленна и включена в программу только для того, чтобы продемонстрировать плавающую арифметику и соглашение _pascal. Вторая представляет собой вариант пузырьковой сортировки, частично реализованный на языке ассемблера.

При создании нового модуля debugC.C автоматически создается заготовка включаемого файла debugC.h, причем C++Builder сразу вводит в него директивы защиты от повторных включений, о которых мы говорили в прошлой главе. Кстати, главный исходный файл консольного проекта называется в 5-й версии Debug, bpf, а не Debug.срр

Листинг 5.1. Тексты программы Debug

/**********************************************************

* * Debug.срр: Главный файл проекта.

*/

#pragma hdrstop

#include <condefs.h>

USEUNIT("debugC.с") ;



#define main

/**********************************************************

* * debugC.h: Заголовок для модуля debugC.с.

*/

#ifndef debugCH

#define debugCH

double _pascal DoSomeMath(double r, double h);

void DoSort(int array[], int n) ;

*endif

/*******************************************

* * debugC.с: Программа для демонстрации отладчика.

*/

#pragma inline

#pragma hdrstop

#include <stdio.h>

#include "debugC.h"

const double Pi = 3.14159265;

#pragma argsused

int main(int argc, char *argv[])

{

double rad, vol;

int i, n = 8;

int iArr[8] = {-1, 23, 7, -16, 0, 11, 24, 3};

rad = 2.0;

vol = DoSomeMath(rad, 3.0);

printf("Volume = %10.6f\n", vol);

DoSort(iArr, n) ;

printf("Sorted array:");

for (i=0; i<n; i++)

printf("%6d", iArr[i]);

printf("\n") ;

return 0;

} /* main */

/************************************************

** Просто чтобы продемонстрировать вызов pascal.

*/

double _pascal DoSomeMath(double r, double h)

{

double s;

s = Pi * r*r;

return s * h;


} /* DoSomeMath */

** Сортировка с inline-ассемблером.

*/

void DoSort(int array[], int n)

{

int i, j;

for (i = n-1; i > 0; i-)

for (j = 0; j < i; j++)

_asm {

push esi

mov ecx, j

mov eax, array

mov edx, [eax+ecx*4]

mov esi, [eax+ecx*4+0x04]

cmp edx, esi

jle skip

mov [eax+ecx*4], esi

mov [еах+есх*4+0хб4], edx

skip:

pop esi }

} /* DoSort */

Прежде чем компилировать программу, нужно убедиться, что сделаны все необходимые установки проекта (диалог Project Options) и отладчика (диалог, вызываемый выбором Tools | Debugger Options... в главном меню).

Открыв уже известный вам диалог Project Options на странице Compiler, нажмите кнопку Full debug. Будут установлены все параметры компилятора и компоновщика, необходимые для отладки.

Диалог Debugger Options, показанный на рис. 5.1, имеет четыре страницы, из которых нам пока понадобится только одна — General. Рекомендую вам пометить на этой странице флажки Inspectors stay on top и Rearrange editor local menu on run — просто для удобства. При установленном втором флажке, например, контекстное меню редактора при запуске программы преобразуется таким образом, чтобы упростить доступ к пунктам управления отладкой.



Рис. 5.1 Страница General диалога Debugger Options



Если вы хотите во время отладки иметь доступ к исходным текстам библиотеки VCL, то нужно установить флажок Use debug libraries на странице Linker диалога Project Options. Правда, компоновка отладочных библиотек может значительно замедлить компиляцию, поэтому не стоит прибегать к этому средству без необходимости.

Теперь я предлагаю вам посмотреть на различные меню, имеющие отношение к отладке.


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