計算機二級C++輔導(dǎo):C++Builder初級調(diào)試技術(shù)

字號:

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