mirror of https://github.com/pwndbg/pwndbg
40 lines
812 B
Bash
Executable File
40 lines
812 B
Bash
Executable File
#!/bin/bash
|
|
|
|
if ! (($#)); then
|
|
cat <<- _EOF_
|
|
$0: [profile-script]
|
|
|
|
Example: $0 context.py
|
|
_EOF_
|
|
exit 1
|
|
fi
|
|
|
|
module=$(basename "${1/.py/}")
|
|
basedir=$(dirname "$0")
|
|
|
|
# Quick and dirty script to profile pwndbg using cProfile.
|
|
make -C "${basedir}" test > /dev/null
|
|
|
|
gdb "${basedir}/test" \
|
|
-ex "source ${basedir}/../gdbinit.py" \
|
|
-ex "b main" \
|
|
-ex "r" \
|
|
-ex "python
|
|
import cProfile;
|
|
import profiling.${module} as profile;
|
|
profile.warmup();
|
|
cProfile.run('profile.run()', '${basedir}/stats')" \
|
|
-ex "quit"
|
|
|
|
python3 -c "
|
|
import pstats
|
|
p = pstats.Stats('${basedir}/stats')
|
|
p.strip_dirs().sort_stats('tottime').print_stats(20)
|
|
"
|
|
|
|
if command -v pyprof2calltree &> /dev/null && command -v kcachegrind &> /dev/null; then
|
|
pyprof2calltree -k -i "${basedir}/stats"
|
|
fi
|
|
|
|
# vim: ts=4 sw=4 noet
|