From: Josef Weidendorfer Date: Thu, 21 Jul 2011 18:58:37 +0000 (+0000) Subject: callgrind_control: fix parsing of vgdb -l X-Git-Tag: svn/VALGRIND_3_7_0~332 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd379979b89d1079eb2c408c7880b7b21fb8d1dc;p=thirdparty%2Fvalgrind.git callgrind_control: fix parsing of vgdb -l If valgrind is called with absolute path (as qtcreator does), callgrind_control found nothing, as it looked for "... for valgrind ...", thus breaking qtcreator. This also fixes expected behavior with client commands called with absolute path. For "/usr/bin/valgrind --tool callgrind /usr/bin/foo", running "callgrind_control foo" should catch this callgrind command. Instead, you previously had to include the absolute path. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11905 --- diff --git a/callgrind/callgrind_control.in b/callgrind/callgrind_control.in index 30f176342e..6492d7b139 100644 --- a/callgrind/callgrind_control.in +++ b/callgrind/callgrind_control.in @@ -29,12 +29,15 @@ sub getCallgrindPids { @pids = (); open LIST, "vgdb -l|"; while() { - if (/^use --pid=(\d+) for valgrind\s+(.*)$/) { + if (/^use --pid=(\d+) for \S*?valgrind\s+(.*?)\s*$/) { $pid = $1; $cmd = $2; if (!($cmd =~ /--tool=callgrind/)) { next; } while($cmd =~ s/^-+\S+\s+//) {} + $cmdline{$pid} = $cmd; + $cmd =~ s/^(\S*).*/$1/; $cmd{$pid} = $cmd; + #print "Found PID $pid, cmd '$cmd{$pid}', cmdline '$cmdline{$pid}'.\n"; push(@pids, $pid); } } @@ -286,7 +289,7 @@ foreach $arg (@ARGV) { if (defined $cmd{$arg}) { $spids{$arg} = 1; next; } $nameFound = 0; foreach $p (@pids) { - if ($cmd{$p} =~ /^$arg/) { + if ($cmd{$p} =~ /$arg$/) { $nameFound = 1; $spids{$p} = 1; } @@ -327,7 +330,7 @@ if ($printStatus || $printBacktrace || $requestEvents) { foreach $pid (@pids) { $pidstr = "PID $pid: "; - if ($pid >0) { print $pidstr.$cmd{$pid}; } + if ($pid >0) { print $pidstr.$cmdline{$pid}; } if ($vgdbCommand eq "") { print "\n";