valgrind를 사용하는 C++ 프로그램에서 메모리 누수를 추적하려고합니다. 이 프로그램은 g ++로 컴파일되며 오류를 발생시키지 않고 실행할 수 있습니다. 불행히도 valgrind는 런타임 오류를 던진 후 충돌하는 방식으로 내 프로그램의 동작을 변경합니다. 이 충돌은 코드의 관련 부분에 도달하기 전에 발생하므로 메모리 누수를 추적 할 기회가 없습니다.valgrind가 이진 동작을 변경 함
모든 문제는 첨부 된 콘솔 출력으로 설명됩니다.
[email protected]:~$ ./myProgram input.xml
Processing...
Finished successfully...
----------------------
Hit Enter to continue...
[email protected]:~$ valgrind --leak-check=yes --log-file=valgrindLog ./myProgram input.xml
Processing...
myProgram-error: Not working Polymorphism. Base class method called instead of derived class method. End-of-myProgram-error.
terminate called after throwing an instance of 'char const*'
Aborted
[email protected]:~$ g++ -dumpversion
4.4.5
[email protected]:~$ valgrind --version
valgrind-3.6.0.SVN-Debian
[email protected]:~$ uname -r
2.6.35-30-generic
[email protected]:~$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"
나는 valgrind가 프로그램의 동작을 변경하는 것을 의심하지만, 나는 단지 프로그램이 어떻게 든 UB를 전시한다고 생각하며 증상은 다릅니다. valgrind 로그에서 오류를 확인하는 데 귀찮았습니까? – PlasmaHH
코드를 볼 필요가 있습니다. –
글쎄, valgrind는 메모리 할당 함수를 후크하므로 실제로 프로그램 동작을 수정합니다. 그러나 프로그램은주의를 기울여서는 안되며,주의를 기울여야한다는 것은 valgrind가 전시 한 UB가 있음을 의미합니다. – sharptooth