I have these:
bpftrace 0.20.2-1 amd64
libbpfcc:amd64 0.29.1+ds-1.1 amd64
libbpfcc-dev:amd64 0.29.1+ds-1.1 amd64
I'm seeing this problem as well, but my error message is slightly
different.
I have a tst.c:
#include <stdio.h>
#include <unistd.h>
void f(int x)
{
printf("%d\n",x);
sleep(1);
}
int main(void)
{
for(int i=0; i<3; i++)
f(i);
return 0;
}
I build it:
gcc -o tst tst.c
And this happens:
dima@shorty:/tmp$ sudo bpftrace -e 'u:tst:f {print(arg0)}' -c './tst'
Attaching 1 probe...
ERROR: Could not resolve symbol: tst:f
Same as with this bug, specifying a wildcard makes it work. It also
works if the path to the ELF file being instrumented is given with a
directory, not just as a bare file. These both work:
sudo bpftrace -e 'u:./tst:f {print(arg0)}' -c './tst'
sudo bpftrace -e 'u:tst:f* {print(arg0)}' -c './tst'
I debugged it a little bit. The different-behavior-with-a-directory
happens because of this branch:
https://sources.debian.org/src/bpfcc/0.29.1%2Bds-1.1/src/cc/bcc_syms.cc/#L798
For whatever reason using a wildcard doesn't go through this chunk of
code at all.
This looks like a bug that should be filed upstream. Can one of you
please do that, if that's appropriate?
Thanks!