In my gentoo box I also receive a couple of annoying bugs in ld and
pthreads, but I have them disabled in ~/.valgrindrc:
--suppressions=/etc/valgrind.supp --leak-check=full
And valgrind will load that file automatically.
http://valgrind.org/docs/manual/manual-core.html also referers three ways of
passing options:
* The file ~/.valgrindrc
* The environment variable $VALGRIND_OPTS
* The file ./.valgrindrc
About filtering the data, the -q switch is a good idea, but then you loose
the ability to read the full valgrind report (with php output), which can be
useful. Another option is to redirect the valgrind output to another fd
(--log-fd=3) and make run-tests.php also read that fd.
Nuno
----- Original Message -----
From: "Dmitry Stogov" <[EMAIL PROTECTED]>
To: "'Marcus Boerger'" <[EMAIL PROTECTED]>; "Nuno Lopes" <[EMAIL PROTECTED]>
Cc: <php-cvs@lists.php.net>
Sent: Thursday, December 01, 2005 7:27 AM
Subject: RE: [PHP-CVS] cvs: php-src / run-tests.php
GREAT!
In addition, it would be nice to support "--suppressions" valgrind option.
On my system (FC4), valgrind always produces the same pthread specific error
on any run.
Se patch in attachment.
Also it is possible to run valgrind wih "-q" option, so valgrind will print
it's own messages only on real errors, and you will not need filter them.
Thanks. Dmitry.
-----Original Message-----
From: Marcus Boerger [mailto:[EMAIL PROTECTED]
Sent: Thursday, December 01, 2005 3:27 AM
To: php-cvs@lists.php.net
Subject: [PHP-CVS] cvs: php-src / run-tests.php
helly Wed Nov 30 19:26:45 2005 EDT
Modified files:
/php-src run-tests.php
Log:
- Add support for valgrind testing (Nuno)
http://cvs.php.net/diff.php/php-src/run-tests.php?r1=1.239&r2=
1.240&ty=u
Index: php-src/run-tests.php
diff -u php-src/run-tests.php:1.239 php-src/run-tests.php:1.240
--- php-src/run-tests.php:1.239 Sat Nov 26 13:07:49 2005
+++ php-src/run-tests.php Wed Nov 30 19:26:44 2005
@@ -23,7 +23,7 @@
+-------------------------------------------------------------
---------+
*/
-/* $Id: run-tests.php,v 1.239 2005/11/26 18:07:49 helly Exp $ */
+/* $Id: run-tests.php,v 1.240 2005/12/01 00:26:44 helly Exp $ */
/* Sanity check to ensure that pcre extension needed by this
script is available.
* In the event it is not, print a nice error message
indicating that this script will @@ -274,6 +274,9 @@
$ini_overwrites[] =
'unicode.output_encoding=utf-8';
$ini_overwrites[] =
'unicode.from_error_mode=U_INVALID_SUBSTITUTE';
break;
+ case 'm':
+ $GLOBALS['leak_check'] = 1;
+ break;
default:
echo "Illegal switch
specified!\n";
case "h":
@@ -302,6 +305,8 @@
-u Test with unicode_semantics set on.
+ -m Test for memory leaks with Valgrind
+
-v Verbose mode.
-h <file> This Help.
@@ -682,7 +687,7 @@
return $data;
} else if ($n > 0) {
$line = fread($pipes[1], 8192);
- if (strlen($line) == 0) {
+ if ($line === false) {
/* EOF */
break;
}
@@ -861,9 +866,10 @@
$tmp_skipif = $tmp . DIRECTORY_SEPARATOR . uniqid('/phpt.');
$tmp_file = $tmp . DIRECTORY_SEPARATOR .
preg_replace('/\.phpt$/','.php',basename($file));
$tmp_post = $tmp . DIRECTORY_SEPARATOR . uniqid('/phpt.');
+ $tmp_relative_file =
+str_replace(dirname(__FILE__).DIRECTORY_SEPARATOR, '', $tmp_file) .
+'t';
if (is_array($IN_REDIRECT)) {
- $tested = $IN_REDIRECT['prefix'] . ' ' .
trim($section_text['TEST']) . " [$tmp_file]";
+ $tested = $IN_REDIRECT['prefix'] . ' ' .
trim($section_text['TEST'])
+. " [$tmp_relative_file]";
$section_text['FILE'] = "# original source
file: $shortname\n" . $section_text['FILE'];
}
@@ -1077,6 +1083,10 @@
}
}
+ if (isset($GLOBALS['leak_check'])) {
+ $cmd = 'valgrind --tool=memcheck ' . $cmd;
+ }
+
if ($DETAILED) echo "
CONTENT_LENGTH = " . getenv("CONTENT_LENGTH") . "
CONTENT_TYPE = " . getenv("CONTENT_TYPE") . "
@@ -1100,6 +1110,31 @@
@unlink($tmp_post);
+ if (isset($GLOBALS['leak_check'])) { // leak check
+ preg_match_all('/==\d+== +\w+ lost: (\d+)
bytes/S', $out, $matches);
+ $leak = false;
+
+ foreach ($matches[1] as $m) {
+ if ($m) { // we got a leak
+ $leak = true;
+ break;
+ }
+ }
+
+ if (!$leak && !preg_match('/==\d+== ERROR
SUMMARY: [1-9]\d* errors/', $out)) {
+ if (isset($old_php)) {
+ $php = $old_php;
+ }
+ echo "PASS $tested\n";
+ return 'PASSED';
+ }
+
+ $output = $out;
+ $wanted = '';
+ $warn = false;
+
+ } else { // normal testing
+
// Does the output match what is expected?
$output = trim($out);
$output = preg_replace('/\r\n/',"\n",$output);
@@ -1158,6 +1193,8 @@
$wanted_re = NULL;
}
+ } //end of non-valgrind testing
+
// Test failed so we need to report details.
if ($warn) {
show_result("WARN", $tested, $file, $info);
@@ -1190,7 +1227,7 @@
// write .diff
if (strpos($log_format,'D') !== FALSE) {
$log = fopen($diff_filename,'wt') or
error("Cannot create test log - $diff_filename");
- fwrite($log,generate_diff($wanted,$wanted_re,$output));
+ fwrite($log, isset($GLOBALS['leak_check']) ? '' :
+generate_diff($wanted,$wanted_re,$output));
fclose($log);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php