]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
callgrind_control: fix parsing of vgdb -l
authorJosef Weidendorfer <Josef.Weidendorfer@gmx.de>
Thu, 21 Jul 2011 18:58:37 +0000 (18:58 +0000)
committerJosef Weidendorfer <Josef.Weidendorfer@gmx.de>
Thu, 21 Jul 2011 18:58:37 +0000 (18:58 +0000)
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

callgrind/callgrind_control.in

index 30f176342edbff5949bb7f173a9d8f8e886358a1..6492d7b139acc95eac87294d4413e37a1cd72d0a 100644 (file)
@@ -29,12 +29,15 @@ sub getCallgrindPids {
   @pids = ();
   open LIST, "vgdb -l|";
   while(<LIST>) {
-      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";