2013-06-03 2 views
0

저는 우분투 리눅스에서 Valgrind와 함께 또는없이 CTest를 실행 중입니다. 잘 작동왜 CMake로 Valgrind 진단 정보를 얻을 수 없습니까?

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

: 나는 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) 

, 나는 다음과 같은 명령을 사용합니다 : 첫째, 나는 테스트를 가능하게하는 CMakeLists.txt 스크립트를 설정합니다. 그러나, 나는 다음과 같은 명령을 실행할 때 Valgrind의 호출합니다 :

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

다음과 같은 메시지가 나타납니다

--Processing memory checking output: 
Memory checking results: 

이것은 확실히 내가 기대하는 진단 정보가 아닙니다. 내가 다음에해야할 일이 궁금 했어. 감사!

편집 : 나중에 진단 정보가 메모리 누출이 발생한 경우에만 사용할 수 있음을 알게되었습니다. 그러나 진단 정보는 오류가 발생한 위치가 제공되지 않는다는 점에서 매우 모호합니다. 어떻게하면 더 자세한 정보를 얻을 수 있습니까?

답변

1

나는 valgrind에서 내 메모리 누수를 파싱하는 python 스크립트를 사용합니다 (here). 내가 cmake에서 직접 메모리 누수 오류를 구문 분석 할 필요가 없습니다

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

같은 것을 :

은 CMake에서 나는 메모리 테스트를 추가하려면 다음 명령을 사용합니다. python 스크립트는 단순히 실행 파일에서 valgrind를 사용하여 메모리 검사를 실행하고 누수가 발견되면 오류를 반환합니다. 누설이 발견되면 테스트가 실패하고 그렇지 않으면 통과합니다. 희망이 당신을 도울 수 있습니다.

1

기본적으로 CMake는 Makefile 프로젝트에 대한 디버그 기호를 작성하지 않으므로 Valgrind는 소스 코드에서 정확한 누수 위치를 확인할 수 없습니다.

는 디버그 기호를 구축하기위한 컴파일러 옵션을 추가해야합니다

cmake -DCMAKE_BUILD_TYPE=Debug /path/to/source 

으로 cmake를 실행 해보십시오.

관련 문제