dbus调试方法

    近期研究了android bluetooth,发现bluez消息都是通过dbus进行传输,但是在java层和bluez通信的过程中,有些会被block住,这样就需要dbus进行调试,下面讲述dbus进行调试的方法。


    dbus提供2个tool,一个是dbus-send, 一个是dbus-monitor。dbus-send可以像调用API那样进行消息传递,而dbus-monitor可以监听dbus消息传递过程。在这里讲述如何通过dbus-send和dbus-monitor结合进行调试。

    

    dbus-monitor监听的时候需要指定sender和dest,如果想hci那样,每次的path都是不同的,怎样指定dest呢?我们需要下面的命令:

root@smi:/ # dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez org.freedesktop.DBus.Introspectable.Introspect

g/bluez org.freedesktop.DBus.Introspectable.Introspect                        <

method return sender=:1.1 -> dest=:1.3 reply_serial=2
   string "  1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">

       
               
                       
               

       

       
               
                       
                       
               

               
                       
               

       

          <-------------看到node name没这就是下一个path

"
root@smi:/ #

继续看是否有下一级path

root@smi:/ # dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/356 org.freedesktop.DBus.Introspectable.Introspect

org/bluez/356 org.freedesktop.DBus.Introspectable.Introspect                  <
method return sender=:1.1 -> dest=:1.12 reply_serial=2
   string "  1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">

 
     <------------------------这个就是下一级path啦

"

再继续看,发现没有node节点了……

root@smi:/ # dbus-send --system --type=method_call --print-reply --dest=org.bluz /org/bluez/356/hci0 org.freedesktop.DBus.Introspectable.Introspect
g/bluez/355/hci0 org.freedesktop.DBus.Introspectable.Introspect               <
method return sender=:1.1 -> dest=:1.13 reply_serial=2
   string "  1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">

       
               
                       
               

       

       
               
                       
               

               
                       
                       
               

               
               
               
               
                       
               

               
               
                       
               

               
                       
                       
               

               
                       
                       
                       
                       
               

               
                       
                       
                       
                       
               

               
                       
               

               
                       
               

               
                       
                       
               

               
                       
                       
               

               
                       
                       
               

               
                       
                       
                       
               

               
                       
               

               
                       
                       
                       
                       
                       
               

               
                       
               

               
                       
                       
               

               
                       
                       
               

               
                       
               

               
               
                       
                       
               

               
                       
               

               
                       
               

               
                       
                       
               

               
                       
               

       

       
               
                       
                       
               

               
                       
                       
               

               
                       
               

               
                       
                       
               

               
       

       
               
                       
                       
               

               
                       
               

               
                       
                       
               

               
                       
                       
                       
               

               
                       
               

       


"

尝试着用dbus-send调用method,

1|root@smi:/ #  dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/356/hci0 org.bluez.Adapter.ListConnection
org/bluez/355/hci0 org.bluez.Adapter.ListConnection                           <
method return sender=:1.1 -> dest=:1.15 reply_serial=2
   int32 0   <--------------------返回值是0
root@smi:/ #

root@smi:/ # dbus-send --system --type=method_call --print-reply --dest=org.bluez /org/bluez/356/hci0 org.bluez.Adapter.ListConnection

下面我们知道ListConnection这个method那我们要监听他了!注意上面的返回值发现有 sender=:1.1 -> dest=:1.15 这就是我们要监听的源和目的了。1.1是Java层,1.15就是bluez啦。


下面dbus-monitor的命令由于种种原因我没有试通,总是有“process 6436:   D-Bus not compiled with backtrace support so unable to print a backtrace
Segmentation fault (core dumped)” 这样的返回,问了很多人不知道怎样打开,但是通过这样的返回,可以看出命令本身没有问题,只是dbus-monitor没有打开这样的功能。如果您有返回值,或者发现什么错误,欢迎您回复我,我好能够完善,谢谢先!

监听整个路径

root@smi:/ # dbus-monitor signal sender=1.1->dest=1.15 path=/org/bluez/356/hci0 interface=org.bluez.Adapter member=ListConnection

监听从dbus-daemon到Java

root@smi:/ # dbus-monitor signal sender=org.freedesktop.DBus->dest=1.1 path=/org/bluez/356/hci0 interface=org.bluez.Adapter member=ListConnection

监听dbus-daemon到bluez

root@smi:/ # dbus-monitor signal sender=1.15->dest=org.freedesktop.DBus- path=/org/bluez/356/hci0 interface=org.bluez.Adapter member=ListConnection








root@smi:/ # dbus-monitor signal sender=1.1->dest=1.15 path=/org/bluez/355/hci0 interface=org.bluez.Adapter member=ListConnection
member=ListConnection

你可能感兴趣的:(工具介绍,基本知识,Linux,Android)