구글링 등을 해서 Android GDB로 붙이는데 성공했습니다 ~


문제는 일반 application은 app_prossess 를 붙이는 데 반해 제가 멀티미디어를 하다 보니 mediaserver를 붙여서 디버깅하고 싶습니다.


타겟

gdbserver :3000 --attach pid(mediaserver pid)


호스트 

prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gdb out/target/product/모델이름/symbols/system/bin/mediaserver 


이후 target remote:3000


문제는 

일반 app_process는 정상적으로 브레이크가 잘 잡히는데 반해

mediaserver는 넘어갈 생각을 하지 않습니다.


(gdb) cont

Continuing.


이 화면에서 계속 멈춰있습니다.

그래서 Ctrl+C로 잠시 멈추고 bt를 하면

#0  __ioctl () at bionic/libc/arch-arm/syscalls/__ioctl.S:15
#1  0xafd2611c in ioctl (fd=<value optimized out>, request=8)
    at bionic/libc/bionic/ioctl.c:41
#2  0xa8215fa4 in android::IPCThreadState::talkWithDriver (this=0xf3a0, 
    doReceive=true) at frameworks/base/libs/binder/IPCThreadState.cpp:791
#3  0xa8216984 in android::IPCThreadState::joinThreadPool (this=0xf3a0, 
    isMain=true) at frameworks/base/libs/binder/IPCThreadState.cpp:446
#4  0x00008a1e in main (argc=<value optimized out>, argv=<value optimized out>)
    at frameworks/base/media/mediaserver/main_mediaserver.cpp:46

계속 ioctrl에서 멈춰있는 것 같습니다.
Driver와 연동에서 문제가 있는 것인지 상당히 난해하네요..

혹시 비슷한 경험 있으신 분은 힌트라도 부탁 드립니다.
overlay등 정보를 찍어보려면 mediaserver로 디버깅해야 할 것 같습니다.

감사합니다.