gdb
gdb seçenekleri yazısına taşıdım.
WinDbg
Hiç kullanmadım. Dosya uzanstısı mdmp şeklinde.
valgrind
valgrind yazısına taşıdım.
Visual Studio
valgrind yazısına taşıdım.
Java Debugger
Yeri gelmişken, Java debugger ile gdb'yi de karşılaştırmak gerekir. Java debugger ile değişkenlere bakarken
object={java.lang.Object@77}
şeklinde bir gösterim görüyoruz. Bu gösterimde nesnenin tipi, ve hashcode değeri belirtiliyor.
callgrind
callgrind kodu instrumente eder. Bu yüzden yavaştır. Very Sleepy gibi araçlar ise istatistiki yöntemlerle çalıştıkları için daha hızlıdırlar.
gcov
kod gcc'nin şu seçenekleri ile derlenir
source dizini belirtir
lcov
lcov komutu yazısına taşıdım.
gprof
gprof'un çıktısı şu şekildedir. Okuması biraz zordur.
google-pprof
Şöyle yaparız. bench-profiled benim uygulamamın ismi
gdb seçenekleri yazısına taşıdım.
ptrace
debugger kullanmadan ptrace ile sistem çağrıları da görülebilir. Kendimize ait olmayan uygulamarı ptrace yapabilmek için burada açıklandığı gibi CAP_SYS_PTRACE hakkı lazım. Uygulama prctl() ile trace edilmemeyi isteyebilir.WinDbg
Hiç kullanmadım. Dosya uzanstısı mdmp şeklinde.
valgrind
valgrind yazısına taşıdım.
Visual Studio
valgrind yazısına taşıdım.
Java Debugger
Yeri gelmişken, Java debugger ile gdb'yi de karşılaştırmak gerekir. Java debugger ile değişkenlere bakarken
object={java.lang.Object@77}
şeklinde bir gösterim görüyoruz. Bu gösterimde nesnenin tipi, ve hashcode değeri belirtiliyor.
callgrind
callgrind kodu instrumente eder. Bu yüzden yavaştır. Very Sleepy gibi araçlar ise istatistiki yöntemlerle çalıştıkları için daha hızlıdırlar.
gcov
kod gcc'nin şu seçenekleri ile derlenir
-fprofile-arcs -ftest-coverage
Şu seçeneği ile linklenir.-lgcov
Derlerken ve linklerken sadece -coverage kullanmamız da sanırım yeterli oluyor. Sunumda da böyle yazıyor.-coverage
Daha sonra gcov uygulaması derleyicinin çalıştırıldığı dizinde çalıştırılır. Şöyle bir kod yapımız olsun.-root
-source
-dir1
-file.cpp
-dir2
-file.cpp
derleyici root dizininden çalıştırılıyorsa, gcov da root dizininden çalıştırılır. Çıktı olarak gcno ve gcda uzantılı bir sürü ara dosya üretilir.-root
-source
-dir1
-file.cpp
-file.o
-file.gcno
-file.gcda
-dir2
-file.cpp
-file.o
-file.gcno
-file.gcda
-s seçeneğisource dizini belirtir
gcov -p -s source source/dir1/file.cpp
lcov
lcov komutu yazısına taşıdım.
gprof
gprof'un çıktısı şu şekildedir. Okuması biraz zordur.
% cumulative self self total
time seconds seconds calls s/call s/call name
71.93 907.85 907.85 201280 0.00 0.00 ForceCalcs
2.61 1237.18 33.00 1258 0.03 1.00 Heap
1.53 1256.45 19.28 1258 0.02 0.02 AdjustSP
0.01 1261.61 0.07 1258 0.00 0.00 Boundary
0.00 1261.61 0.00 100 0.00 0.00 Profile
0.00 1261.61 0.00 2 0.00 0.00 MakeMap
0.00 1261.61 0.00 1 0.00 0.18 Initialize
Çıktıyı görsel olarak görmek için şöyle yapabiliriz.gprof executable | gprof2dot.py | dot -T pdf > profile.pdf
google-pprof
Şöyle yaparız. bench-profiled benim uygulamamın ismi
$ google-pprof bench-profiled timing.pprof
Using local file bench-profiled.
Using local file timing.pprof.
Welcome to pprof! For help, type 'help'.
(pprof) top 10
Total: 593 samples
154 26.0% 26.0% 377 63.6% sqlite3_randomness
134 22.6% 48.6% 557 93.9% sqlite3_reset
83 14.0% 62.6% 83 14.0% __read_nocancel
61 10.3% 72.8% 61 10.3% sqlite3_strnicmp
41 6.9% 79.8% 46 7.8% sqlite3_free_table
26 4.4% 84.1% 26 4.4% sqlite3_uri_parameter
25 4.2% 88.4% 25 4.2% llseek
13 2.2% 90.6% 121 20.4% sqlite3_db_config
12 2.0% 92.6% 12 2.0% __pthread_mutex_unlock_usercnt (inline)
10 1.7% 94.3% 10 1.7% __GI___pthread_mutex_lock
Hiç yorum yok:
Yorum Gönder