2012-11-16 61 views
1

我正在嘗試在C++中的簡單hello世界程序上做代碼覆蓋。 目標設備是一個ARM處理器,因此我使用GNU ARM工具鏈。arm-elf-gcc。沒有.gcda文件創建,程序太大,不適合內存?

arm-elf-gcc -mcpu = arm7tdmi -O2 -g -c main.c -o main.exe創建.gcno文件,但未能創建gcov需要的.gcda文件以查找代碼覆蓋。

正常情況下,當我運行g ++/gcc -fprofile-arcs -ftest-coverage .cpp時,它首先創建一個.gcno文件和一個.exe文件。運行a.exe後,它會生成.gcda文件。

這裏,當我嘗試運行main.exe來生成.gcda時,它會拋出一個錯誤 - 程序太大而不適合內存。 如何解決此問題? 我錯了嗎?

謝謝, 一個-J

+0

我想我已經找到了原因。 arm可執行文件不能在x86上運行。但是,如何在不能運行exe的情況下獲得代碼覆蓋? – aditya3524

回答

0

很明顯,你必須運行在目標設備上執行。目標設備必須有一個文件系統。退出時,可執行文件使用普通的POSIX函數編寫覆蓋率信息 - open,fcntl,write,close等。查看GCC源代碼中的gcov-io.c。確保你可以成功地鏈接libgcov.a到你的可執行文件,你有目標設備的寫權限等。

+0

我會試試這個。另外,語法是否正確?我必須創建一個-o main.elf文件,然後在目標上運行這個文件嗎?我是新來的。 – aditya3524

+0

通常他們的目標不會打擾文件的名稱是什麼。 OS加載器將在文件本身內部的ELF頭部尋找ELF簽名,並且如果ELF頭部中的類型不是ET_EXEC,則拒絕執行它。 – chill

+0

好的。非常感謝你! – aditya3524