valgrind 改变二进制行为

问题描述 投票:0回答:4

我尝试使用 valgrind 追踪 C++ 程序中的内存泄漏。该程序使用 g++ 编译,可以运行而不会引发任何错误。不幸的是 valgrind 改变了我的程序的行为,导致它在抛出运行时错误后崩溃。由于此崩溃发生在到达代码的相关部分之前,我没有机会追踪我的内存泄漏。

附加的控制台输出说明了整个问题。

myUser@computer:~$ ./myProgram input.xml

Processing...

Finished successfully...

----------------------
Hit Enter to continue...

myUser@computer:~$ 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
myUser@computer:~$ g++ -dumpversion
4.4.5
myUser@computer:~$ valgrind --version
valgrind-3.6.0.SVN-Debian
myUser@computer:~$ uname -r
2.6.35-30-generic
myUser@computer:~$ cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.10
DISTRIB_CODENAME=maverick
DISTRIB_DESCRIPTION="Ubuntu 10.10"
c++ valgrind
4个回答
4
投票

valgrind 很可能正在改变代码的行为,因为您遇到了比内存泄漏更严重的错误。 无错误、可移植的代码可能不会仅仅因为您使用 valgrind 运行它而抛出异常。


1
投票

非常感谢大家!!!

我已经返回到我的代码来追踪 valgrind 揭示的未定义行为。最后我找到了它并且可以通过它改进我的代码。

再次非常感谢!!


0
投票

不幸的是 valgrind 改变了我的程序的行为,导致它在抛出运行时错误后崩溃。由于此崩溃发生在到达代码的相关部分之前,我没有机会追踪我的内存泄漏。

这是伟大的运气。现在,除了查找并修复内存故障之外,您还可以查找并修复错误。您是否查看过核心文件以找出代码的错误位置?


-1
投票

我遇到过这样的问题:Valgrind 在所有事情上都搞乱了,暴露了以前从未出现过的线程争用问题。 我不认为这里会发生类似的事情?

© www.soinside.com 2019 - 2024. All rights reserved.