2013-06-03 48 views
0

我現在在Ubuntu Linux中使用或不使用Valgrind運行CTest。首先,我成立了一個腳本的CMakeLists.txt,使測試:爲什麼我無法使用CMake獲取Valgrind診斷信息?

enable_testing() 
include(CTest) 
if(UNIX) 
    set(CTEST_MEMORYCHECK_COMMAND, "usr/bin/valgrind") 
    set(CTEST_MEMORYCHECK_COMMAND_OPTIONS, "--trace-children=yes --leak-check=full") 
endif() 

add_test(NAME test 
     WORKING_DIRECTORY ${my_outputdirectory} 
     COMMAND test_exe) 

當我運行沒有Valgrind的測試,我用下面的命令:

cmake -G "CodeBlocks - Unix Makefiles" 
ctest -D ExperimentalBuild 
ctest -R test -D ExperimentalTest 

這工作正常。然而,當我運行下面的命令來調用Valgrind的:

cmake -G "CodeBlocks - Unix Makefiles" 
    ctest -D ExperimentalBuild 
    ctest -R test -D ExperimentalMemChec 

以下消息出現:

--Processing memory checking output: 
Memory checking results: 

這絕對不是我所期望的診斷信息。我想知道我下一步該做什麼。謝謝!

編輯: 後來,我發現只有在發生內存泄漏的情況下,診斷信息纔可用。但是,診斷信息非常模糊,因爲沒有給出發生錯誤的位置。我怎樣才能獲得更詳細的信息?

回答

1

我使用了一個python腳本來解析我的valgrind的內存泄漏,它可用here

在CMake的我用下面的命令來添加內存測試:

ADD_TEST(testName ${Test_Dir}/memtest.py ${CMAKE_CURRENT_BINARY_DIR}/testExecutable ${CMAKE_BINARY_DIR}) 

這樣的,我並不需要解析直接在C進行內存泄漏錯誤。 python腳本只需執行一次valgrind對可執行文件的內存檢查,並在發現泄漏時返回一個錯誤。如果發現泄漏,則測試失敗,否則測試通過。希望這可以幫助你。

1

默認情況下,CMake不會爲Makefile項目生成調試符號,因此Valgrind無法確定源代碼中泄漏的確切位置。

嘗試用

cmake -DCMAKE_BUILD_TYPE=Debug /path/to/source 

應增加對建築調試符號編譯器選項運行cmake的。

相關問題