2012-08-30 64 views
3

我有一個測試這樣的代碼:如何在沒有優化的情況下使用gcc與gcc?

int diff21(int n) 
{ 
    if (n <= 21) 
    { 
     return 21 - n; 
    } 
    else 
    { 
     return (n - 21) * 2; 
    } 
} 

,我添加了編譯標誌:-fprofile-arcs -ftest-coverage提供覆蓋數據。

我寫測試代碼:

CU_ASSERT(diff21(19) == 2); 

,我用LCOV生成一個HTML報告,它說的else分支的return (n - 21) * 2是excuted,所以我做了100%的行覆蓋率。 這是不正確

我用Google搜索,發現是因爲this --- gcc的優化可以通過將其與其它線路相結合,消除一些簡單的代碼行,但我應該怎麼生成的覆蓋數據,如果我」米不應該使用-fprofile-arcs -ftest-coverage國旗?

btw我使用netbeans和cygwin做單元測試,我不認爲在makefile或腳本中手動調用gcov對我有好處。

只爲您的信息,我使用的LCOV這樣的:

#!/bin/bash 

rm -rf coverage_report 
rm -f app.info 

lcov -b . -d . -c -o app.info 
mkdir coverage_report 
genhtml --legend --highlight -o coverage_report app.info 
rm -f app.info 
lcov -d . -z 

回答

0

嘗試使用-O0標誌進行編譯。

+0

這仍然會優化單一退貨狀態。 – shengy