g*********s 发帖数: 1782 | 1 试了一下purify和valgrind,下面的code报告结果相同,都是两个越界读,两个越界写
,一个申请未释放。那purify的优势在哪里啊?license挺贵的。
另外那个comment掉的巨型静态数组两个都不报。有什么工具能处理这种情况吗?
trace一个memory crash的bug,搞不定啊。这个crash是在系统的new[]里,看上去是内
存分配表被搞乱了。
#include
#include
#include
int main()
{
long *x = (long*)malloc(10);
x[10] = 100; // invalid write.
long y = x[10]; // invalid read.
long z[10];
long w(10);
z[10] = 100; //static array allocated in stack. no boundary check.
y = z[10]; //no boundary check. |
t****t 发帖数: 6806 | 2 http://valgrind.org/gallery/survey_03/q4.html
【在 g*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 试了一下purify和valgrind,下面的code报告结果相同,都是两个越界读,两个越界写 : ,一个申请未释放。那purify的优势在哪里啊?license挺贵的。 : 另外那个comment掉的巨型静态数组两个都不报。有什么工具能处理这种情况吗? : trace一个memory crash的bug,搞不定啊。这个crash是在系统的new[]里,看上去是内 : 存分配表被搞乱了。 : #include : #include : #include : int main() : {
|
o**o 发帖数: 3964 | 3 我也发现valgrind不能发现栈溢出的问题。
【在 g*********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 试了一下purify和valgrind,下面的code报告结果相同,都是两个越界读,两个越界写 : ,一个申请未释放。那purify的优势在哪里啊?license挺贵的。 : 另外那个comment掉的巨型静态数组两个都不报。有什么工具能处理这种情况吗? : trace一个memory crash的bug,搞不定啊。这个crash是在系统的new[]里,看上去是内 : 存分配表被搞乱了。 : #include : #include : #include : int main() : {
|
t****t 发帖数: 6806 | 4 很正常, valgrind的机制是simulate 指令, 并且替换malloc/free一类的调用
栈上的不是用malloc分配的, 所以它弄不清楚
换句话说比如
int a[64];
int b;
假设分配时b在a 后面
那CPU要访问a[64]和访问b, 产生的指令是一模一样的, valgrind当然不知道, 因为它
不管源代码
【在 o**o 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我也发现valgrind不能发现栈溢出的问题。
|
c****e 发帖数: 1453 | 5 These are run-time program analysis tools. The biggest concern is the
coverage. Static analysis at source code level gives you better coverage.
They are complement to each other.
Memory leakage checker is relatively easy to build. We have very good in-
house tools on this, and it's really easy to use. Race-condition checker is
harder though. |