Igo*_*lić 4 valgrind filter call-graph
我正在尝试为服务器生成调用图以用于文档目的.不适用于任何类型的分析.
我生成了输出:
sudo valgrind --tool=callgrind --dump-instr=yes /opt/ats-trunk/bin/traffic_server
Run Code Online (Sandbox Code Playgroud)
并转换为:http://code.google.com/p/jrfonseca/wiki/Gprof2Dot转换为.dot文件,但这包含太多信息,无法用作文档.
我想过滤掉对libc,libstdc ++,libtcl,libhwloc和诸如此类的库的调用.
nb:我一直在努力试图找出无用的库,但这看起来很麻烦且不完整.
非常感谢您提前的答案.
在震耳欲聋的沉默之后,实际上我问到的每一个地方,我都转向了valgrind-users @ ML.这是线程:
Josef的回复非常有帮助,并且有很多耐心来自#perl我已经整理了一个脚本,帮助我过滤掉我在调用图中不需要的库.
该脚本依赖于告诉callgrind额外冗长:
valgrind --tool=callgrind --dump-instr=yes --compress-pos=no \
--compress-strings=no /opt/ats-trunk/bin/traffic_server
Run Code Online (Sandbox Code Playgroud)
这样它将生成字符串而不是引用数字,使其更容易解析:
#!/usr/bin/perl
use Modern::Perl;
require File::Temp;
my $cob = qr{^cob=/(?:usr/)?lib};
my $ob = qr{^ob=/(?:usr/)?lib/};
my $calls = qr{^calls=};
open (my $fh, '<', $ARGV[0]) or die $!;
my $tmp = File::Temp->new(UNLINK => 1);
## Skip all external libraries, as defined by $ob
while (readline $fh) {
if (/$ob/ ) {
# skip the entire ob= section we don't need.
0 while defined($_ = readline $fh) && !/^ob=/;
# put the last line back, we read too far
seek($fh, -length($_), 1);
} else {
print $tmp $_;
}
}
close ($fh);
## Skip all calls to external libraries, as defined by $cob
my $tmpname = $tmp->filename;
open ($tmp, '<', $tmpname) or die $!;
while (readline $tmp) {
if (/$cob/) {
# skip until we find a line starting with calls=
# skip that line too
0 while defined($_ = readline $tmp) && !/$calls/;
# then we skip until we either hit ^word= or an empty line.
# In other words: skip all lines that start with 0x
0 while defined($_ = readline $tmp) && /^0x/;
# put the last line back, we read too far
seek($tmp, -length($_), 1);
} else {
print;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |