fche changed the topic of #systemtap to: http://sourceware.org/systemtap; email systemtap@sourceware.org if answers here not timely, conversations may be logged
orivej has quit [Read error: Connection reset by peer]
<Amy1>
semantic error: no match (similar functions: main, _fini, _init, _start, make_graph)
orivej_ has joined #systemtap
<Amy1>
why this occur? I run the same stap command for two different executable files. one is ok, another failed.
<fche2>
maybe some are compiled with -g and some are not
<fche2>
why do you have the @*.c part there?
<Amy1>
I want to probe all functions
<fche2>
yes so function("*")
<Amy1>
oh, I know the reason
<Amy1>
my files are *.cpp
<Amy1>
ERROR: probe overhead exceeded threshold
<fche2>
see man error::pass5
orivej_ has quit [Quit: No Ping reply in 180 seconds.]
orivej has joined #systemtap
<Amy1>
why does the associative array auto print without my code when process exit?
<fche2>
it's a service to help abbreviate scripts
<fche2>
if you only ever write into a global variable but don't read, stap will synthesize a shutdown-time print
<Amy1>
oh
<Amy1>
thank you
<Amy1>
why does the probe process.end run twice?
<Amy1>
process.end stap into five times, why?
<fche2>
there may be that many processes ending, not sure
<Amy1>
when I run stap -L 'process("main.bin").end'
<Amy1>
it only print one point
<Amy1>
I just want to capture the main.bin process's exit
<fche2>
-L lists probe points available for probing, not number of times the event might hit
<Amy1>
I write a main.cpp which just has one print sentence. why the print sentence in process.end print twice?
<fche2>
not sure it should
<fche2>
there might be shell level fork/exec traffic that is noticed by this probe
<Amy1>
sudo stap -g --suppress-time-limits xx.stp "main.bin" -c ./main.bin also print twice in process.end
<Amy1>
fche2: I found the reason
<Amy1>
23333
<Amy1>
I use process("main.bin").end solved this
derek0883 has quit [Read error: Connection reset by peer]
derek0883 has joined #systemtap
orivej has quit [Quit: No Ping reply in 180 seconds.]
orivej has joined #systemtap
<Amy1>
the simple code contained only one sentence test passed
<Amy1>
but the real code still run twice
<Amy1>
after I use process("main.bin").end
<fche2>
running stap -c foo can make visible a short-lived temporary process we use to synchronize startup
<fche2>
maybe that's what you're seeing
<Amy1>
stap xx.stp -c ./main.bin ?
<fche2>
yeah
<fche2>
as opposed to stap xx.stp & ; ./main.bin
<Amy1>
I had tried this
<Amy1>
but it is also print twice
<Amy1>
stap xx.stap &; ./main.bin also print twice
<Amy1>
fche2: could it caused by memory leak?
<fche2>
doubt it
<fche2>
maybe the process.end probe is not selective enough; maybe trapping beginning and end of a shutdown process, not sure
<Amy1>
the simple program print one time in process("main.bin").end, but my real program contained memory leak print twice
<Amy1>
ohl
<Amy1>
There are a system("") call in my program
orivej has quit [Ping timeout: 246 seconds]
orivej has joined #systemtap
<Amy1>
fche2: After I comment the system("") call, it is right...
<fche2>
there you go
<Amy1>
so how to solve this?
<Amy1>
with uncomment the system("") call
orivej has quit [Quit: No Ping reply in 180 seconds.]
<Amy1>
could I use exec function call instead of system() call to solve this?
orivej has joined #systemtap
<Amy1>
fche2: process("main.bin").end will capture the exit of main.bin process and it's child process,right?
<fche2>
yes
<Amy1>
so how to just capture the main process or main thread?
<fche2>
if pid() == target() maybe
<Amy1>
but it need the process id
<Amy1>
stap -x ID
<Amy1>
it's not cool
<fche2>
target() gets the -c CMD pid automatically
<Amy1>
stap xx.stap -c ./main.bin, ok?
<Amy1>
not need pid?
<fche2>
yes
<fche2>
well more like
<fche2>
if pid() == target() works for -c ./main.bin
<Amy1>
I think it's better to extern the syntax of process.end
<Amy1>
process("main.bin").main.end
<Amy1>
process("main.bin").all.end
<Amy1>
fche2: if pid() == target() solved
<Amy1>
thank you
<Amy1>
I have another question
<Amy1>
how to format the associative array's print?
<Amy1>
beacuse the key don't have the same length
<Amy1>
for example, foreach(key in array) printf("%s %d\n",key,value), I want the key's width is the biggest width of all keys
<irker823>
systemtap: fche systemtap.git:master * release-4.2-95-gb5bea06d3 / elaborate.cxx: warnings: don't complain about cross-file global var access within tapset
<fche2>
Amy1, you'd have to do something like take two passes to measure the actual maximum length
<fche2>
or keep an auxiliary statistics object tracking the string lengths
<fche2>
and then use that number as a printf("%*s" ...) length parameter
orivej has quit [Ping timeout: 258 seconds]
orivej has joined #systemtap
<Amy1>
fche2: thank
<Amy1>
but I think it's better to provide a attribute of associative array
orivej has quit [Ping timeout: 246 seconds]
orivej has joined #systemtap
tromey has quit [Quit: ERC (IRC client for Emacs 28.0.50)]