זהו מכתב ששלחתי לפני כמה דקות. אני חושב שהוא דיי מדבר בעד עצמו.
| Hello Shachar ,
| Hope you are well.. it has been a while since we last have communicated ;-))
|
|
Yes, it was.
| Just following up with you to see whether all is in order with regards to
| Compuware software ..
|
Nothing new has transpired. Almost nothing new, that is.
A while back I was stuck while developing an open source project, with an unexplained access violation. I got a demo from you, which totally and utterly failed to spot the problem. I decided that much though I like the idea behind the Compuware tools, it is not worth the money.
Since then I managed to find out the cause of the problem that haunted me back then. It turns out to be a bug in ATL. The details are available at http://gborg.postgresql.org/pipermail/oledb-dev/2004-November/000155.html.
Quite frankly, I expected bounds checker to be able to tell me more about the bug. If it told me “you tried to access memory area X, which was allocated here and freed here”, the entire search would have been so much shorter. I realize that this is not a technically simple task to achieve, but as things stand Bounds Checker failed the usefulness test as far as I’m concerned, and so I don’t think I will be acquiring it. I should point out that open source project “valgrind” does correctly detect such errors and give useful output, and without performing any compile time instrumentation. I would have used it here, except it only has a Linux version. Being open source, however, there is nothing stopping you from applying the valgrind technique for Windows.
Here is an example of a program exhibiting the precise same type of error as happened in ATL, which caused the access violation we were trying to debug using bounds checker.
#include
#include
int main()
{
const char **a;
a=malloc(sizeof(*a));
*a="Hello";
free(a);
printf("%sn", *a);
return 0;
}
Running with valgrind:
==17356== Memcheck, a memory error detector for x86-linux.
==17356== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==17356== Using valgrind-2.4.0.rc3, a program supervision framework for x86-linux.
==17356== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==17356== For more details, rerun with: -v
==17356==
==17356== Invalid read of size 4
==17356== at 0x804842A: main (valgrindtest.c:12)
==17356== Address 0x1BA58028 is 0 bytes inside a block of size 4 free'd
==17356== at 0x1B904B04: free (vg_replace_malloc.c:152)
==17356== by 0x8048426: main (valgrindtest.c:11)
Hello
==17356==
==17356== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 13 from 1)
==17356== malloc/free: in use at exit: 0 bytes in 0 blocks.
==17356== malloc/free: 1 allocs, 1 frees, 4 bytes allocated.
==17356== For counts of detected errors, rerun with: -v
==17356== No malloc'd blocks no leaks are possible.
| Pls let me know if I can be of any assistance to you concerning our products
| at this time
|
|
Not at this time, no. As you can see, your open source competition is doing a better job at it than you.
| Always at your service!
| Best regards ,
|
|
Shachar
Shachar Shemesh
Lingnu Open Source Consulting ltd.
Have you backed up today’s work? http://www.lingnu.com/backup.html
Compuware הינה, למיטב ידיעתי, החברה המובילה בכלים למטרות עזרה לפיתוח. הם מייצרים את SoftICE המיתולוגי. הכלים שלהם נחשבים מהמובילים לצרכי בדיקות מהסוג הזה. כאשר נתקלתי בבעיה במצויינת במכתב, זה היה אף טבעי לבדוק את הפתרונות שלהם כדרך לפתרון הבעיה.
לפני הכל, אני חייב לציין לטובה את היחס המצויין שקיבלתי מהם. קיבלתי Trial מוגבל בזמן, אבל חוץ מזה פעיל לחלוטין. כאשר נתקלתי בבעיות, צוות התמיכה שלהם השתדל בצורה מאוד מאוד מרשימה יחסית למישהו שהוא (עדיין) לא לקוח משלם. הצינים יגידו שבגלל שאני עוד לא לקוח משלם הם השתדלו, אבל באמת אני מאמין שמדובר פה ביחס מייצג. ללא ספק, יחסית לשירות תמיכה שאני מכיר בתוכנות קנייניות אחרות, קיבלתי פה שירות שהיה ברמה מאוד גבוהה.
אבל כאשר מסתכלים על התוצאה הסופית אין אלא להגיע למסקנה שזה לא מספיק. אני משוכנע שיש דברים ש-Bounds Checker עושה טוב, ואף יותר טוב מ-Valgrind. חלקית אני יודע את זה בגלל שעבדתי איתו בעבר. זו גם היתה הסיבה שפניתי אליהם הפעם.
מסתבר, אבל, שהכלי לא מסוגל להתמודד עם “גישה לזכרון שהוחזר”. התשובה שקיבלתי מהתמיכה שלהם – “זו בעיה לא נתמכת”. אם לא היה ניתן לגלות את הבעיה בכלל, הייתי מבין. עובדה, אבל, ש-Valgrind כן מסוגל לגלות אותה, ואף לתת מידע שימושי לצורך פתרון של הבעיה.
קחו את זה בתור נקודה למחשבה לגבי open source ו-market leaders.
שחר
I used to get the impression that the "canonical" about memory allocation errors is Purify, aquired by Rational which was acquired by IBM:
http://www-306.ibm.com/software/awdtools/purifyplus/
I wish there was something open-source like this, is there something new I don’t know about?