測試工具:insure++

CSDN資源:http://www.csdn.net/tag/insure%252B%252B

安裝。

  1,簡介:http://baike.baidu.com/link?url=bCcoWd3xi07KMU8VGVthyQ2466AGj2sODDgNzFqEPxPiaU5wU941tBA9DPUtObjC8mdSteqCBULzX5CLpKREmqphp

  2,安裝平臺:Ubuntu 14.04.1 LTShtml

  3,解壓及準備工做。bash

    1) 建立一個insure目錄,並解壓(tar -zxf <insure tar page>)服務器

    2)解壓後,將源包放在解壓目錄下。函數

    3)閱讀README文件,或者直接使用./install。全部選項都使用默認便可。測試

    4)到setup 5時(README),選擇A:add a license. 此時,須要hostid 和 密碼。ui

      a. hostid 可輸入 S 指令查看。url

      b. 密碼須要破解(破解教程須要本身搜索) .net

    5)獲得許可(或破解)後,後面步驟分紅兩種。翻譯

      a. 直接使用ln -s source dist連接,並將link文件放在/usr/bin/中便可使用。

      b. 也可在.bashrc中添加全局PATH,將<tar dir>/insure/bin的路徑添加的環境變量中。

        i. 路徑添加的參考文章:http://blog.chinaunix.net/uid-23781137-id-3451238.html

  4,完成安裝後,輸入指令:insure g++ ...可能會出現:undefined reference...的錯誤。

    1)解決方案:http://forums.parasoft.com/lofiversion/index.php/t2617.html

    2)即在 g++ 指令後添加: -Wl,--no-as-needed.便可。

    3)理論上添加--no-as-needed不會影響程序運行,但由於對此設置瞭解不深入。沒法徹底保證。

    4)部分工程不會報出錯誤,但連接後會在log文件中提示沒法使用insure的功能。

常見問題。

  1,insure++中使用libdl.a靜態連接問題.

    1)問題現象: 

      ../base/lib64/libdl.a(dlsym.o): In function `dlsym': 
      (.text+0x5): undefined reference to `__dlsym'

    2)解決方案(暫時):使用動態連接方式。即便用 *.so 文件代替 *.a文件。

    3)出現問題的緣由:懷疑insure使用了對應的動態連接方式。

    4)參考文章:http://www.newsmth.net/nForum/#!article/CProgramming/113004 只有解決方案,但沒有解釋緣由。

  2,tca [option] tca.log 出錯:float points exception(core dumped)

    1)出現緣由:部分文件的分母部分爲0.致使計算覆蓋率百分比時出錯。

    2)解決辦法:使用TCA界面版本,或在block爲0的模塊中添加一個無用的內聯函數。使除法的分母爲1.

    3)我的建議:使用TCA界面版本,由於這樣不須要增長無用的模塊(不少.h文件都是沒有任何函數塊的)。如服務器中沒有界面,能夠複製tca.log and tca.map文件到本機,再經過TCA界面打開。

    4)另外對於覆蓋率,可使用BullseyeCoverage。很是簡單好用。

    PS:測試使用inusre++.file_ignore 功能,指望使用此選項忽視部分頭文件。失敗。設置解釋爲:經過此設置的文件會直接經過編譯器進行編譯,而不增長insure的額外代碼。而覆蓋率彷佛與insure的插入代碼 沒有關聯。

       「無關聯」結論依據: 使用 "*.h" 忽視全部頭文件,在TCA中依然能夠顯示全部的頭文件。

      結論基於file_ingore 設置成功的前提。但沒法找到方法去肯定 忽略文件 的功能是正常的。若是對此結論有所懷疑,能夠嘗試測試file_ignore功能,若是我的對於file_ignore功能理解有誤,則上述結論可能存在錯誤。

    PS2:複製服務器上的log and map 文件,須要從新設置map和log的路徑。須要注意:tca.log中保存默認的tca.map的索引路徑。若是要在其餘機器上觀察.log文件,須要與默認路徑相同。

經常使用配置。

  1,配置文件.psrc。能夠進行多文件配置。詳情參考insure用戶手冊。

    1)我的建議:根目錄+項目目錄雙重配置。固然,若是沒有必要針對項目進行配置的話。能夠直接使用根目錄便可。

      a. 使用默認配置其實已經能夠知足基本的要求。

    2)由於服務器端無GUI,因此須要將全部信息輸出爲文件的格式。因此,在此配置的基礎文件命令以下。

      a. insure++.report_banner on
       insure++.report_file [ filename ]

  2,提取TCA文件信息(爲無界面版服務)

    1)具體命令爲:tca -dF tca.log >> [ filename ]

  3,經常使用設置。(我的閱讀英文手冊,測試和翻譯獲得。並不能保證徹底理解原含義。對此有疑議的,能夠參考手冊。)

    1)insure++.summarize leaks ——針對leak(內存泄漏)生成一個綜合報告。其餘選項有: bugs coverage outstanding.

    2)insure++.report_banner on——將報告輸出到默認的IO中,通常狀況下,就是當前的terminal窗口

    3)insure++.report_file ./insurelog/%v-exec:%d.Log——講報告輸出到一個指定文件中。能夠對名字進行一些設置。和 report_banner 衝突。開啓此選項會默認關閉此選項。

    4)insure++.report_overwrite false——寫入報告時,是否覆蓋已有文件。默認打開

    5)inusre++.summarize coverage  //  insure++.coverage_switches tca [option]——設置 代碼覆蓋率報告。將代碼覆蓋率數據 直接 彙總的測試報告中。但未測試,是否與leak設置衝突。

    6)insure++.coverage_log_file [full path]  //  insure++.coverage_map_file [full path]——設置 覆蓋率的log and map文件的保存路徑

    7)insure++.compiler_fault_recovery off——默認爲on,打開時,僅在連接(link)時強制使用insure。而編譯時僅嘗試使用,如insure任意操做失敗,會自動調用默認的編譯器進行編譯。此時,insure對當前文件爲不可用狀態。

    8)insure++.compiler_fault_recovery_banner on——建議設置爲on,會在執行insure插入操做時打印一條信息在terminal上。

    9)insure++.verbosity 4——編譯和連接報告:0-4級。默認等級未知。開啓時,會在當前目錄下生成Insurelog.txt文件。等級0-4:用來設置報告(編譯,連接和運行)的詳細程度。      

相關文章
相關標籤/搜索