程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ Builder初級調試技術

C++ Builder初級調試技術

編輯:關於C++

有很多是可以用調試來看到問題所在.只是初學者不知道有這些東東,即使知道也不是如何去用.

我曾經也是這樣.從第一本入門書 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……….

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved