有很多是可以用調試來看到問題所在.只是初學者不知道有這些東東,即使知道也不是如何去用.
我曾經也是這樣.從第一本入門書 BUG 一直困擾自己, 常常用ShowMessage("xxxx");來觀察程序運行現象.
因為本人只學過TC 在TC中代碼寫的不很長,程序流程自己很清楚,也就沒去使用TC的調試器,好象它沒有集成
的調試器. 在BCB下,程序流程總是跳來跳去不象TC下樣結構化編程序樣條理清楚.因為BCB編程中會產生很多
事件,很多內部變化,而且有很多組件.就象匯編語言中的標志寄存器樣,初學者無法掌握它.
我曾經得到一本徐新華遍的<<C++BUILLDER5高級編程之IDE OOP>> 有人認為它是一本爛書,我覺的差不多.
裡面比較全民介紹了BCB集成的調試器,但是裡面沒有用實例來講解.本人試來試去也不得其法.最後參加了工作
從工作中及前輩的示范,很快學會了基本調試手段.主要使用 F7 F8 F5 CTRL+F5 因為這些必須組合在一起才
能工作好,就象API函數樣必須有多個函數齊心協力才能辦成事.
這就是我想寫該文章的目的,也可做為我的心得. 現在我們就講講基本的非事件的例子......
我們就來段 :
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Image1->Canvas->Font->Name="SimSun";
Image1->Canvas->Font->Size=30;
Image1->Canvas->TextOut(0,0,Edit3->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Text;
int i,j;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if(Image1->Canvas->Pixels[j][i]==clWhite)
Text=Text+Edit2->Text; ////當然如果你要生成如下的文字,背景就用" ".
else
Text=Text+Edit1->Text;
}
Memo1->Lines->Add(Text);
Text="";
}
}
//---------------------------------------------------------------------------
用F8 看看程序流程
=>WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) //調試指針指向程序入口點 但還沒有執行該條語句
{
try //第2下F8後指向這裡
{
//第4下F8後指向這裡決定進去看看按下F7 請看下面....
Application->Run(); //第9下 F8 後指向這裡 程序即將進入消息循環 馬上就會顯示出程序界面來
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
第5下 F7後指向:
=> __fastcall TForm1::TForm1(TComponent* Owner) //構造函數入口點
: TForm(Owner) //第6下 F8 不管它!!
{
Image1->Canvas->Font->Name="SimSun"; //第7下 F8 想看看Name是不是"SimSun" 好把光標移到Name中間按下 Ctrl+F5
Image1->Canvas->Font->Size=30; //第7下 F8 後已經運行了上面的語句了 看看結果如何?
Image1->Canvas->TextOut(0,0,Edit3->Text); //第8下 F8 同樣可以看看Edit3的Text 你自己去看看!!
=> } //第9下 F8 指到這裡 想告術你該函數即將結束 這是它出口點
再看看 F5 斷點設置 :把光標移到 if(Image1->Canvas->Pixels[j][i]==clWhite) 中間 按下F5 它就會用紅色標記出
注意必須在有效代碼行中設置 空格和刮號為無效的.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString Text;
int i,j;
for(i=0;i<30;i++)
{
for(j=0;j<30;j++)
{
if(Image1->Canvas->Pixels[j][i]==clWhite)
Text=Text+Edit2->Text; ////當然如果你要生成如下的文字,背景就用" ".
else
Application->Initialize(); //第3下F8後指向這裡 決定是進到裡面看看函數運行過程還是繼續? 選擇跳過 再按一次F8
Application->CreateForm(__classid(TForm1), &Form1);
//第4下F8後指向這裡決定進去看看按下F7 請看下面....
程序就會停了下來
接著就可以使用 F8 Ctrl+F5 如果沒有問題就可以把端點取消掉 讓後F9 讓它自己運行去
以後再說了,先說到這裡 再見!!! Program DeBug Over……….