全國服務熱線 : 4000-020-230

當前位(wèi)置:首(shǒu)頁 > 技術支持 > 技術文章

技術文章 產品知識 下載中心

技術文章

久久夜色精品国产欧美乱极品 久久秘 成人久久无码 久久久久无码精品国产H动漫猫咪 久久久久久成人毛片免费看 久久久国产精品免费A片芒果 久久久WWW成人免费精品 久久精品国产麻豆MD0068 久久国产精品精品国产色综合 久久99精品国产自在现线 久草免费在线 九一视频污視邁(OZEAM)全數字可視對講係統程序(xù)調試技巧(qiǎo)
發布日期:2012-03-03 15:12:43     作者:    已(yǐ)有  閱讀過本文

      摘要:本文闡述了(le)在久久夜色精品国产欧美乱极品 久久秘 成人久久无码 久久久久无码精品国产H动漫猫咪 久久久久久成人毛片免费看 久久久国产精品免费A片芒果 久久久WWW成人免费精品 久久精品国产麻豆MD0068 久久国产精品精品国产色综合 久久99精品国产自在现线 久草免费在线 九一视频污視邁(OZEAM)全數字可視對講係統程(chéng)序(xù)調試(shì)過程中通過map(映射文件)和cod(程序集(jí)、機器碼、源代(dài)碼)文件查找異常地址的方法和應用技巧

      關鍵詞:程序異常 全數字可(kě)視對講(jiǎng)係統 久久夜色精品国产欧美乱极品 久久秘 成人久久无码 久久久久无码精品国产H动漫猫咪 久久久久久成人毛片免费看 久久久国产精品免费A片芒果 久久久WWW成人免费精品 久久精品国产麻豆MD0068 久久国产精品精品国产色综合 久久99精品国产自在现线 久草免费在线 九一视频污視邁 OZEAM 異常地址 map cod

 

      我們在研發久久夜色精品国产欧美乱极品 久久秘 成人久久无码 久久久久无码精品国产H动漫猫咪 久久久久久成人毛片免费看 久久久国产精品免费A片芒果 久久久WWW成人免费精品 久久精品国产麻豆MD0068 久久国产精品精品国产色综合 久久99精品国产自在现线 久草免费在线 九一视频污視邁(OZEAM)全數字可(kě)視對講(jiǎng)係統程序(xù)時,經常會(huì)遇(yù)到程序異常的情況。在程序異常(cháng)時(shí),通常通過debug調試的方法找原因。在非調試的模式下(xià)或者實際(jì)應用中,程序出現崩潰(kuì),當程序比較複雜,通過查(chá)看代碼(mǎ)不容易查出問題。

      在evc和vs2005的工具中,可以通過生成map(映射文件)和cod(程序集、機器碼、源代碼)文件(jiàn)查找異常(cháng)地址。map可定位在發生崩潰的函數,code文(wén)件可(kě)定(dìng)位在具體函數中的某一行。

      在evc中配置設置如(rú)下

    (1)生成Cod文件:在Project->Setting->C/C++->Listing file type中,選擇Assembli,Machine Code,and Source。如(rú)圖1.1.

圖1.1

 

    (2)生成Map文(wén)件:在Project->Setting->Link中,在(zài)Generate mapfile選項中打勾。如圖1.2

圖1.2

 

       在vs2005中配(pèi)置設置如下

      (1)生成Cod文件:在屬性(xìng)->配置屬(shǔ)性->C/C++->輸出文件中,選擇程序集、機器碼和原代碼(/FAcs)。如圖1.3

圖(tú)1.3

 

     (2)生成Map文件:在屬性->配置屬性->鏈接器->調試->生成映射文件選擇是(/NAP).如圖1.4

圖1.4

 

    設置該2項後,編譯工程(chéng),會生成.cod和.map文件。這(zhè)些文(wén)件就是用來查(chá)找(zhǎo)異常地址。

 

    下麵舉個(gè)例子:

 

 void CHelloDlg::Fun(char *pbuf)

{

     *pbuf = 1;

}

 

// CHelloDlg 消(xiāo)息處理程序

 

BOOL CHelloDlg::OnInitDialog()

{

     CDialog::OnInitDialog();

 

     // 設置此(cǐ)對(duì)話框的圖標。當應用程(chéng)序主窗口不是對話(huà)框時,框架將自動

     //  執行此操作

     SetIcon(m_hIcon, TRUE);          // 設置大圖標

     SetIcon(m_hIcon, FALSE);         // 設置小圖標

 

     // TODO: 在此(cǐ)添加額外的初(chū)始化代碼

     char *p = 0;

     Fun(p);

    

     return TRUE;  // 除非將焦點設置到控件,否則返回TRUE

}

 

    很(hěn)容(róng)易看出來,在函數Fun中pbuf是(shì)參數p沒有申請空(kōng)間,所以*pbuf = 1會異(yì)常。

     所以在運行時出(chū)現如下異常:

PC=0001119c(Hello.exe+0x0000119c) RA=00011194(Hello.exe +0x00001194) SP=0004f620, BVA=00000000

 

     這裏麵最關鍵的信息是PC和RA給出的地址(zhǐ)信息。PC就是上麵提到的崩潰地址,根據這個地址可以定位(wèi)到導致(zhì)崩潰的(de)源代碼行;RA是(shì)PC的返回地址(Return Address),根據這個地址可以找到導致崩潰的上一級函數。除了PC和(hé)RA,其他(tā)信息也可以提供一些參考作(zuò)用:BVA是ARM中的Fault Address Register(FAR),是引起Data Abort的虛擬地址,比如說你的程序試圖訪問一個非法地址裏的內(nèi)容,那麽Data Abort時BVA就是這個非法地址;FSR是Fault Status Register,指明導致異常的原因。

 

     1、查找異常(cháng)的(de)函數:

     打開Hello.map文件,內容如下(xià)(截取部(bù)分)

  Address         Publics by Value              Rva+Base       Lib:Object

0001:0000015c       ?DoDataExchange@CHelloDlg@@MAAXPAVCDataExchange@@@Z 0001115c f   HelloDlg.obj

 0001:0000015c       ?Serialize@CObject@@UAAXAAVCArchive@@@Z 0001115c f   Hello.obj

 0001:0000015c       ?OnBnClickedButton1@CHelloDlg@@QAAXXZ 0001115c f   HelloDlg.obj

 0001:0000015c       ?DoDataExchange@CWnd@@MAAXPAVCDataExchange@@@Z 0001115c f   HelloDlg.obj

 0001:00000160       ?OnInitDialog@CHelloDlg@@MAAHXZ 00011160 f   HelloDlg.obj

 0001:000001a8       ?GetMessageMap@CHelloDlg@@MBAPBUAFX_MSGMAP@@XZ 000111a8 f   HelloDlg.obj

 0001:000001b4       ?GetMessageMap@CWinApp@@MBAPBUAFX_MSGMAP@@XZ 000111b4 f   uafxcw:appcore.obj

 0001:000001b4       ?GetThisMessageMap@CWinApp@@KAPBUAFX_MSGMAP@@XZ 000111b4 f   uafxcw:appcore.obj

 0001:000001c0       ?_LoadSysPolicies@CWinApp@@IAAHXZ 000111c0 f   uafxcw:appcore.obj

 0001:000002e4       ?InitApplication@CWinApp@@UAAHXZ 000112e4 f   uafxcw:appcore.obj

 0001:00000370       ??1CWinApp@@UAA@XZ         00011370 f   uafxcw:appcore.obj

 0001:000004bc       ?ExitInstance@CWinApp@@UAAHXZ 000114bc f   uafxcw:appcore.obj

 

通過異常地址0001119c,找到最相(xiàng)近的2個地址

OnInitDialog@CHelloDlg@@MAAHXZ 00011160 f   HelloDlg.obj

GetMessageMap@CHelloDlg@@MBAPBUAFX_MSGMAP@@XZ 000111a8 f   HelloDlg.obj

以上2個地址表示函數的起始地址,所以直(zhí)接看HelloDlg,異常的地址在(zài)HelloDlg .obj的CHelloDlg的OnInitDialog。相應的代碼在HelloDlg.cod

 

2、查找異常的行號

異常地址為0001119c,減(jiǎn)去起始地址00011160,得0x3c。

異常(cháng)地址的上一層函數地址為00011194,減去起(qǐ)始地址00011160,得0x34。

打開HelloDlg.cod,部分內容如下

 

; 48   :

; 49   : // TODO: 在此添(tiān)加(jiā)額(é)外的初始化代碼

; 50   : char *p = 0;

 

  00034  e3a02000         mov         r2, #0

 

; 51   : FunOSAD(p);

 

  00038  e3a03001         mov         r3, #1

  0003c   e5c23000          strb        r3, [r2]

 

; 52   :

; 53   : return TRUE;  // 除非將焦點設置到控件(jiàn),否則返回 TRUE

 

(說明:48是行號(hào),00034是十六進製地址)

根據0x3c,可找到0003c      e5c23000          strb        r3, [r2],往上看,可以知道(dào)在FunOSAD中異常了。第51行。即*pbuf = 1;這一行(háng)。

 

上一(yī)層地址0x34,可找到上一級函數00034     e3a02000         mov         r2, #0,往上(shàng)看可知道上一級地址為char *p = 0;,第50行。

 

以上方法成功應用於久久夜色精品国产欧美乱极品 久久秘 成人久久无码 久久久久无码精品国产H动漫猫咪 久久久久久成人毛片免费看 久久久国产精品免费A片芒果 久久久WWW成人免费精品 久久精品国产麻豆MD0068 久久国产精品精品国产色综合 久久99精品国产自在现线 久草免费在线 九一视频污視邁(OZEAM)全數字可視對講係統(tǒng)、智能家(jiā)居係統程序的研發過程,使產品更加穩(wěn)定。


返回
【推薦閱(yuè)讀】

24小時(shí)全國服務熱線:4000-020-230

關注我們:
©2016 廣州市久久夜色精品国产欧美乱极品 久久秘 成人久久无码 久久久久无码精品国产H动漫猫咪 久久久久久成人毛片免费看 久久久国产精品免费A片芒果 久久久WWW成人免费精品 久久精品国产麻豆MD0068 久久国产精品精品国产色综合 久久99精品国产自在现线 久草免费在线 九一视频污智(zhì)智(zhì)能科技有限(xiàn)公(gōng)司 版權所(suǒ)有.All Rights Reserved.      粵ICP備10043508號-1
網絡支持(chí):艾迪品牌策劃設計
業(yè)務服務
客服電話

4000-020-230

久久夜色精品国产欧美乱极品_久久秘 成人久久无码_久久久久无码精品国产H动漫猫咪_久久久久久成人毛片免费看_久久久国产精品免费A片芒果_久久久WWW成人免费精品_久久精品国产麻豆MD0068_久久国产精品精品国产色综合_久久99精品国产自在现线_久草免费在线_九一视频污