Menyiapkan dan Memakai Windows debugging symbols


Seperti yang diketahui banyak orang, sistem operasi Microsoft Windows adalah sistem operasi berbayar yang closed-source dimana kode program sistem operasi tersebut tidak dipublikasikan untuk umum.   Namun, Microsoft menyediakan Debugging Tools for Windows yang dapat dipakai untuk menelusuri sistem operasi Windows sehingga seseorang dapat memperoleh beberapa informasi tanpa harus memiliki source code sistem operasi tersebut.   Panduan untuk men-install Debugging Tools for Windows dapat dilihat di http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx.

Debugging Tools for Windows dapat dipakai untuk men-debug Windows itu sendiri.   Tapi sebelum dapat men-debug dengan nyaman, saya harus terlebih dahulu menyiapkan debugging symbol untuk Windows (setidaknya minimal untuk kernel).   Apa itu debugging symbol?   Pada saat membuat kode program, programmer memakai nama pengenal untuk variabel, konstanta, methods, functions, class, dan sebagainya.   Nama tersebut (atau disebut juga symbol) sebenarnya hanya sebuah ‘label’ yang mewakili lokasi memori.   Tanpa adanya nama-nama tersebut, program tetap dapat berjalan.   Oleh sebab itu, nama-nama seperti nama variabel, nama method, dan sejenisnya biasanya tidak disertakan pada hasil distribusi program.   Tujuannya adalah untuk menghemat ukuran file yang dihasilkan.

Khusus untuk platform Windows, debugging symbol tidak disertakan di dalam program, melainkan pada sebuah file terpisah yang berakhiran *.pdb (program database).   File *.pdb dapat berisi dua jenis symbol, yaitu private symbol dan public symbol.   Informasi paling lengkap akan ditemui pada private symbol yang meliputi hingga nama variabel lokal dan informasi nomor baris untuk setiap intruksi bahasa mesin.   Sementara itu, bagian public symbol hanya beris informasi nama function dan nama variabel global.   Dengan kata lain, public symbol mengandung informasi yang lebih sedikit dibandingkan dengan private symbol.   Sebuah file symbol yang hanya mengandung public symbol disebut juga sebagai stripped symbol file.   Tool PDBCopy dapat dipakai untuk menghasilkan stripped symbol file dari sebuah full symbol file, seperti yang diperlihatkan pada gambar berikut ini:

Memakai Tool PDBCopy

Memakai Tool PDBCopy

Berikut ini adalah contoh tampilan stack untuk sebuah thread tanpa debugging symbol Windows:

Isi stack di sebuah thread

Isi stack di sebuah thread

Pada stack di atas, terlihat bahwa kernel32.dll (bagian dari Win32 API) memanggil ntdll.dll (native API) yang kemudian memanggil ntkrnlpa.exe (kernel sistem operasi).   Terlihat bahwa sistem operasi Windows memakai arsitektur berlapis (layer).   Hal ini karena Windows dari awal dirancang untuk mendukung beberapa arsitektur hardware yang berbeda (walaupun pada akhirnya yang didukung hanya prosesor x86/x64).   Pembuat aplikasi hanya perlu memanggil Win32 API.   Nantinya, Win32 API akan berkonsultasi dengan ntdll.dll yang bila perlu akan memanggil fungsi yang disediakan kernel.   Nama method yang terlibat terlihat dengan jelas disini, walaupun saya belum memiliki debugging symbol.   Mengapa demikian? Hal ini karena file DLL (sangat jarang pada file EXE) umumnya akan men-export method untuk dipanggil oleh program lain; nama method yang di-export akan tersimpan di dalam file program.   Baik file DLL maupun file EXE di Windows mengikuti format Portable Executable (PE) dimana mereka bisa mendefinisikan nama method yang di-export di lokasi .edata section.   Saya bisa melihat informasi tersebut dengan menggunakan tool dumpbin bawaan Visual Studio seperti yang terlihat pada gambar berikut ini:

Memakai Tool Dumpbin

Memakai Tool Dumpbin

Kembali ke stack, pada baris 9, 10, 11, 12, dan 13, terlihat bahwa terlihat ada pemanggilan di AUDIODG.EXE, tetapi saya tidak mengetahui secara persis apa nama method yang terlibat.   File tersebut tidak men-export method sehingga tidak ada informasi yang ditampilkan, seperti yang terlihat pada gambar berikut ini:

Tidak ada method yang di-export

Tidak ada method yang di-export

Untuk itulah saya perlu men-download debugging symbol yang berkaitan dengan program tersebut.   Microsoft menyediakan Microsoft Symbol Server yang dapat dipakai untuk mengambil file symbol pada saat dibutuhkan.   Btw, simbol yang ditawarkan oleh Microsoft adalah public symbol bukan private symbol.

Bila komputer tidak selalu terhubung dengan internet, maka terdapat file symbol dapat di-download secara offline dengan membaca instruksi di halaman http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx.   Pada saat memilih sistem operasi, akan terdapat dua jenis sistem operasi yaitu retail dan checked.   Windows versi retail adalah versi yang dijual dan dipakai oleh umum.   Karena sudah melalui proses optimalisasi pada saat kompilasi dan tracing yang dimatikan, Windows versi retail sulit di-debug.   Oleh sebab itu, pengguna yang berlangganan MSDN dapat men-download dan memakai Windows versi checked yang lebih mudah di-debug (tapi juga lebih lambat dibanding dengan versi retail sehingga tidak cocok untuk keperluan sehari-hari).

Masalah akan terjadi bila memakai debugging symbol secara offline pada sistem operasi Windows yang sering di-update.   Setiap kali update Windows mewakili terjadinya perubahan pada kode program sistem operasi.   Dengan demikian, symbol yang saya miliki secara offline kini belum tentu akurat.   Beruntungnya, setelah melakukan update Windows, saya dapat memperbaharui symbol dengan menggunakan tool symchk.   Dengan asumsi saya men-install symbols di folder C:\symbols, maka saya dapat memperbaharui symbol tersebut dengan memberikan perintah:

symchk /r c:\windows\system32 /s SRV*c:\symbols\*http://msdl.microsoft.com/download/symbols

Tapi percobaan pertama saya gagal karena symchk sama sekali tidak menghubungi Microsoft Symbol Server.   Mengapa demikian? Ternyata letak permasalahannya ada di Internet Explorer, terdapat tanda centang pada menu File, Work Offline.   Ini adalah masalah yang sedikit ‘konyol’ karena tidak intuitif bagi user (terutama yang bukan pemakai IE): sangat sulit membayangkan bahwa kegagalan ini berhubungan dengan Internet Explorer.   Saya juga pernah beberapa menghadapi kejadian yang sama dimana fasilitas Adobe Dreamweaver tidak bekerja hanya karena Internet Explorer ‘work offline’.

Setelah menghilangkan tanda centang ‘work offline’ di Internet Explorer, saya kembali menjalankan program symchk.   Kini program tersebut akan memeriksa isi folder c:\windows\system32 dan men-download debugging symbol terbaru bila simbol yang sudah ada di c:\symbols tidak aktual (up-todate).

Sekarang, setelah menambahkan debugging symbol, saya dapat melihat informasi yang lebih detail, misalnya seperti pada gambar berikut ini:

Informasi nama method setelah penambahan symbol

Informasi nama method setelah penambahan symbol

Perihal Solid Snake
I'm nothing...

One Response to Menyiapkan dan Memakai Windows debugging symbols

  1. Ping-balik: Melakukan Local Kernel Debugging Di Windows 7 | The Solid Snake

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: