GDB Remote Debug (Windows makinesinden Linux Makinesindeki binariyi debug etme)

This is a document which I prepared at work. That why I needed to prepare it in Turkish. If people show interest I will add translation.

GDB çok faydalı bir tool. Özellikle gdbtui olarak kullanınca bizim vazgeçilmez silahlarımızdan biri oluyor . Fakat diyelimki debug etmek istediğimiz structure: “ntplInfo.u.errorData.errBuffer[0]” gibi birşey. Bu structure ‘in içine bakmak için yazıcağımız gdb komutu o kadar uzun oluyorki, gdb konsolununda pek kullanıcı dostu olmamasından dolayı çalışmak imkansız hale geliyor . Bunun için user interface desteği almamız gerekiyor. Ben aşağıda eclipse araçılığıyla linux binarisini nasıl debug ederiz anlatmaya çalışacağım.

Şimdi adımları tarifi vermeden önce kullanıcağımız malzemelerden bahsedelim .

1- Linux makinesinde gdb ve gdbserver , versiyonlar 7.6 veya üstü olmalıdır.

2 – Windows makinesinde gdb’nin aynı versiyonun kurmalıyız. Bunun için mingw indirmemiz lazım. Yanı sıra derleyebilmemiz için expat isimli projeyi de manuel derlememiz lazım . Bunlardan sonra gdb yi derleyebiliriz .

3 – Eclipse ve eclipse pluginleri . Eclipse ‘in remote connection ile ilglli bütün core pluginlerine sahip olmamız lazım . Pluginler default geliyor zaten çok merak etmeyin .

Şimdi Gelelim Tarife:

1 – Zaten sistem takımımz tarafından GDB ve gdb server linux makinelerine kuruluyor . Siz yinede kontrol edin .

2- GDB yi linuxde default çalıştırın , x86_64-unknown-linux-gnu gibi bir banner görüceksiniz. Bunu note edin ileride kullanıcağız.

3- Mingw ‘yi indirin cvgwin ile denemeyin sorun çıkıyor .

4 -Expat source kodunu inidirin. Ve mingwden indirdiğin folder’A gidip ./configure , make , make install yapın.

5- GDB 7.7 nin source kodunu indirin  .”./gdb-7.4/configure –with-expat –target=x86_64-unknown-linux-gnu –host=i686-pc-mingw32″ ile konfigure edin .Ve sonra make ve make install yapın.

Şimdi gelelim ,manuel testte acaba bu adıma kadar herşeyi yaptıkmı . Ben burada yaklaşık 3-4 saat kaybettim umarım siz bu yazının sayesinde kaybetmezsiniz.

6 – Linux makinesinde dummy bir proje oluşturalım ismide hello olsun . Hello ‘u g++47 -g -o hello hello.cpp diyerek derleyelim.

7 – Linux makinesinde gdbserver ‘ı çalıştıralım : “gdbserver –debug localhost:10000 hello”, ben 10000 portunu seçtim sizin keyfiniz bilir

8 – 10000 portunu açalım yoksa OS reject ediyor (3-4 saat burda kaybettim)

[root@tux ~]# iptables -I INPUT -p tcp –dport 10000 –syn -j ACCEPT
[root@tux ~]# iptables -I INPUT -p tcp –sport 10000 –syn -j ACCEPT

9 – Windows makinesine hello binarisini ve hello.cpp’yi kopyalıyalım.

10 – Mingw ‘den hello ‘nun bulunduğu dizine gidip “./gdb  hello” ile çalıştıralım. Ve sonrada “target remote 172.16.42.244:10000” komutu ile linux makinemizdeki(172.16.42.244) gdbserver ‘a bağlanalım.

image2014-6-4 14-6-56  console’dan testlerimizi yaptık. Ama asıl amaçımız eclipseden bir GUI yardımı ile bunu başarmak.

11  –  Eclipse ‘e geçmeden önce son olaraki global variable ‘lara mingw/bin path ini ekleyelim(sizin mingw niz nerdeyse ona göre ayarlayın). Ve yukardaki adımları windows cmd ‘den deneyin global variable ‘ı doğru set ettiyseniz herşey yukardaki gibi çalışacaktır .

Geldik eclipse kısmına, eclipse bir sürü butonlar ve opsiyonlar koymuş fakat bir çoğu bizim konumuzla alakasız ve kafa karıştırıcı.

12 – Eclipse ‘de projenizi seçin, benim bu örnekte anlataçağım artık hello değil napa_project olacak. run–>debug_configurations penceresini açın. Burda sol menüde “C/C++ attach to application”  opsiyonun seçin diğerleri benim gibi zaman kaybetmenize neden olacaktır.

13 – C/C++ application kısmına debug etmek istediğiniz binariyi şeçin, project olarak debug etmek istediğiniz projeyi şeçin. Benim için ekran çıktısı:

image2014-6-4 20-18-52

14 – Aynı tabde şimdi debugger ‘a gelin, debugger olarak gdbserver şeçin , gdb olarak windows ‘a yeni kurduğumuz gdb binarisini seçin . GDB command file ‘I .gdbinit olarak bırakın .

image2014-6-4 20-21-52

15 – GDBSERVER seçtiğinizde debugger tab’ında  yukarda gözüktüğü gibi Connection sekmesi açılacaktır . host ip yi(linux ip si) ve gdbserver ‘in dinlediği portu(10000) buraya yazın .

image2014-6-4 20-23-11
16 – .gdbinit dosyasının içine aşağıdaki satırları kendinize uygun olarak girin

file test
b main
set solib-absolute-prefix /root/erdemdem/napa_project/
set solib-search-path /lib64

17 – Eğer warning: Could not load shared library symbols for 11 libraries, e.g. /opt/napatech3/lib/libntapi.so.

gibi bir warning alıyorsanız

set solib-search-path /opt/napatech3/lib/ , gibi gdbinit dosyasına eklendi yapın buraya bir kere koymanız gerekecek her gdb çalıştığında her zaman otomatik çalışacaktır.

18 – Linux tarafında gdbserver ayakta ve listening modda olduğunda emin olun ,

19 – Debugı başlatın , gdbinit ‘e b main koyduğumuzdan main ‘de duracaktır .

20 – GUI den break point, next ,continue gibi testleri yapın

Sonuç : unlimited debugging powerrrr

image2014-6-4 20-29-40

SharpEar Multi Channel Acoustic Camera Simulation

SharpEar is a open source “Microphone array” simulation project.
SharpEar simulates a “Microphone Array” and “Room”.
User can add voice, noice, moving voices in to the Room. After User selects a .wav file and a position for this sound in the room; user can trigger beamforming . According to the position of the “Microphone Array” and “Sound Sources” beamforming will color the room. User can choose a “Sound” as “Noice”, “Voice” or even a Moving “Voice”.

Features

  • Room Simulation For Microphone Array
  • Wav files will be read and could be attached any point in the room
  • Sounds could be categorized by User as noice,sound or moving sound.
  • Beamforming and Room Coloring according to beamforming result in each point
  • Speaker Identification
  • Adaptive Beamforming according to speaker identification

Links :

https://sourceforge.net/projects/sharpear/

https://github.com/kerdemdemir/sharpEar

sharpEarOutput