2 Ağustos 2016 Salı

GDB

gdb
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ği
source 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