summaryrefslogtreecommitdiff
path: root/callgrind
diff options
context:
space:
mode:
authorweidendo <weidendo@a5019735-40e9-0310-863c-91ae7b9d1cf9>2011-07-21 18:58:37 +0000
committerweidendo <weidendo@a5019735-40e9-0310-863c-91ae7b9d1cf9>2011-07-21 18:58:37 +0000
commite5704c94391a9790b92f34a7eb42ac22d8781a12 (patch)
tree736fca45893d321798c2959a61dc75c615575e73 /callgrind
parent130f6f5a47a1557a454b24db6e08431da6c8b9c1 (diff)
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 a5019735-40e9-0310-863c-91ae7b9d1cf9
Diffstat (limited to 'callgrind')
-rw-r--r--callgrind/callgrind_control.in9
1 files changed, 6 insertions, 3 deletions
diff --git a/callgrind/callgrind_control.in b/callgrind/callgrind_control.in
index 30f17634..6492d7b1 100644
--- a/callgrind/callgrind_control.in
+++ b/callgrind/callgrind_control.in
@@ -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";