Backtrace atau stack backtrace dengan kata lain bisa diartikan dengan melihat stack frame pada titik tertentu di suatu program yang sedang berjalan, atau secara realtime.Hal ini sering atau biasanya dilakukan untuk mencari bug atau masalah pada suatu program sehingga proses update dan revisi suatu program jadi lebih cepat.
Proses backtrace ini saya rasa sangat penting diketahui (menurut saya pribadi, malah wajib) terutama buat pengguna aplikasi opensource dan juga Linux tentunya, karena dengan mengetahui cara untuk melakukan backtrace pada aplikasi dan mengirimkan hasil backtrace tersebut maka kita telah membantu para developer-developer suatu program untuk memperbaikinya.
Khususnya di Indonesia hal ini bisa dibilang sangat minim, orang Indonesia bisa dibilang termasuk kategori paling malas melaporkan suatu bug yang ditemukan, atau malah mereka ga ngarti kalau mereka itu lagi mendapatkan masalah pada aplikasinya. Makanya kadang orang Indonesia sangat sering disebutt bisa make doank, parahnya lagi ketika menghadapi masalah atau bug pada program bukannya membantu programmernya untuk memperbaiki program tapi justru mencemooh programmer tersebut, menjelek-jelekan pembuat program dan bilang programmernya payah. Jangankan untuk membuat program untuk mencari masalah atau melaporkan bug tersebut dia ga bisa, sebenarnya siapa yang payah?Sekarang udah saatnya berubah, mari kita mulai dari hal yang paling kecil yaitu bagaimana mencari suatu bug, dan menyimpannya dalam suatu file, dan selanjutnya melaporkan atau mengirim hasil backtrace tersebut ke pembuat program, meski saya sendiri tidak terlalu memahami dengan konsep stack frames, atau apalah didalam melakukan backtrace ataupun debugging, tapi setidaknya kita membantu agar program yang kita gunakan selalu update.
Salah satu caranya melakukan backtrace adalah dengan bantuan gdb, berikut cara melakukan bactrace pada suatu program dengan menggunakan gdb:
Perintah diatas bisa diartikan seperti ini, melakukan debug pada program ‘namaprogram’ dengan ‘gdb’ yang outputnya diprint ke stderr(2) dan dilewatkan ke stdin(1) kemudian diteruskan pada program ‘tee’ untuk kemudian disimpan pada file dengan nama ‘namaprogram-backtrace.txt’, untuk lebih lanjut dengan redirection bisa dilihat disini. tee adalah program yang membaca dari standar input dan diteruskan ke standar output.
$gdb namaprogram 2>&1 | tee namaprogram-backtrace.txt
Perintah diatas bisa diartikan seperti ini, melakukan debug pada program ‘namaprogram’ dengan ‘gdb’ yang outputnya diprint ke stderr(2) dan dilewatkan ke stdin(1) kemudian diteruskan pada program ‘tee’ untuk kemudian disimpan pada file dengan nama ‘namaprogram-backtrace.txt’, untuk lebih lanjut dengan redirection bisa dilihat disini. tee adalah program yang membaca dari standar input dan diteruskan ke standar output.
perintah ini akan membuat kita masuk ke program gdb, dan di dalam gdb lanjutkan dengan perintah berikut.
(gdb) handle SIG33 pass nostop noprint
(gdb) set pagination 0
(gdb) run
Setelah mengetikan run maka program akan berjalan seperti biasa, lakukan hal-hal yang mengakibatkan program menjadi crash, jika program mengalami hang namun tidak crash, pada terminal tempat gdb dijalankan tekan Ctrl-c. Setelah kembali ke gdb, jalankan perintah berikut
(gdb) backtrace full
(gdb) info registers
(gdb) x/16i $pc
(gdb) thread apply all backtrace
(gdb) quit
Setelah perintah terakhir (quit) kita kembali ke terminal, di direktori aktif akan ada sebuah file yang berisi log dari program yang kita jalankan, file inilah yang kita lampirkan ketika melaporkan suatu bug. Atau mungkin dianalisa sendiri ^_^.
Referensi
+ wiki.Ubuntu
0 comments:
Post a Comment