Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12596
  • 博文数量: 5
  • 博客积分: 185
  • 博客等级: 入伍新兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-10 11:45
文章分类
文章存档

2011年(5)

我的朋友
最近访客

分类: IT业界

2011-07-10 11:59:57

 

——本文内容包括例子Example2,D-Bus的调试工具的详细介绍及Example2的调试方法

    首先请自行下载源代码:example2-dbus-add.tar
    再运行:./autogen.sh 与./configure与make
    如果没有安装相应的库,按照编译错误信息的提示使用 yum命令下载
    先在不同的终端下运行一次./example-service和./example-client,观察client端显示结果,其说明见
dbus-send部分

    以下在不同的调试工具下运行Example2
一.D-feet         
    D-feet是D-Bus的一种调试工具,用python写的。它可以很详细而清晰地显示各个bus上的Bus names,
unique name,object paths,interfaces,methods or signals,并且可以对某个object发送消息和观察相应的结果。(如果你没有D-feet,在运行程序之前,请再下载D-feet )      
    接下来,先运行./example-service,再在另一个终端中键入并运行d-feet命令,就会弹出下面窗口,展开各个选项,选取一个截图如下:


    选择session bus,
    在Bus Name栏中找到:org.fmddlmyy.Test;在右边一栏中可以看到:
    连接名——Name(well-known name):org.fmddlmyy.Test
    唯一名——Unique Name(connection unique name)::1.17
    对象路径——/TestObj(在Object Paths下)
    各个接口——如org.fmddlmyy.Test.Basic等(在Interfaces下)
    方法或信号——如Add(Int32 arg0,Int32 arg1)→(Int32 ret),它有两个参数,一个返回值
     
    双击名为Add的method,弹出以下窗口:

              


    在Parameters框中输入:1,2;
    Execut它,
    在Output框中显示:3
    在D-feet中我们可以很明了地看到一条路线:
    session bus→org.fmddlmyy.Test(1.17)→TestObj→org.fmddlmyy.DBus.Basic
→[Add(Int32 arg0,Int32 arg1)→(Int32 ret)];

二.qdbusviewer
    qdbusviewer是Qt软件包中的开发工具,它的窗口和使用方式与D-feet十分相似,不再赘述。

三.qdbus
    qdbus是Qt下的一个命令行工具。命令结构如下:
    dbus [--session] [--literal] [servicename] [path] [method] [args]
       --session也可以是--system
       --literal表示打印返回信息
       其中servicename即为connection name
       其他选项含义不言自明

    用法示例:
    在Example2中运行了./example-service后,在另一终端上:
    1.$ qdbus --session      ——列出session上所有的connection name,包括unique connection names
    2.$ qdbus org.fmddlmyy.Test     ——列出org.fmddlmyy.Text下的所有对象路径
    3.$ qdbus org.fmddlmyy.Test  /org/fmddlmyy/TestObj    ——列出TestObj下的所有接口
    4.$ qdbus org.fmddlmyy.Test /org/fmddlmyy/TestObj org.fmddlmyy.TestObj.Basic   ——列出方法

四.dbus-send与dbus-monitor
    dbus-send与dbus-monitor都是dbus提供的工具
    dbus-send:既可以查看系统中D-Bus信息,又可以代替client端发送消息给server端
    dbus-monitor:监视总线上流动着的消息

    在运行了./example-server后,在第二个终端(Term1)中准备运行dbus-send相关命令,在第三个终端(Term2)上准备运行dbus-monitor相关命令。

用法示例:1.用dbus-send查看bus上挂载的连接:本质是在调用org.freedesktop.DBus提供的标准接口,
          而org.freedesktop.DBus就类似于文件系统中的根目录,点击它就能看到下面的子目录。命令基
          格式可以用帮助命令查看
    Term1命令:$ dbus-send  --session --type=method_call --printreply --dest=org/freedesktop.DBus /
org.freedesktop.DBus.ListNames
    Term1输出:
         method return sender=org.freedesktop.DBus -> dest=:1.23 reply_serial=2
                     array [
                     string "org.freedesktop.DBus"
                     string "org.freedesktop.Notifications"
                     string "org.freedesktop.Tracker"
                     string "org.freedesktop.PowerManagement"
                     string ":1.7"
                     string ":1.8"
                     string "org.gnome.ScreenSaver"
                     string ":1.9"
                     string ":1.10"
                     string ":1.22"
                     string ":1.11"
                     string "org.gnome.GnomeVFS.Daemon"
                     string ":1.23"
                     string ":1.12"
                     string ":1.13"
                     string ":1.0"
                     string ":1.14"
                     string ":1.1"
                     string ":1.15"
                     string ":1.2"
                     string ":1.16"
                     string ":1.3"
                     string "org.gnome.GkbdConfigRegistry"
                     string ":1.4"
                     string "org.fmddlmyy.Test"
                     string ":1.5"
                     string "org.gnome.SettingsDaemon"
                     string ":1.6"
                  ]
          
    在输出里我们找到我们感兴趣的:org.fmddlmyy.Test,那么对象路径如何获得呢?所有的对象路径都是由根:/ 开始的,可以从它遍历
    Term1命令:$ dbus-send --session --type=mothod_call --print-reply -dest=org.fmddlmyy.Test /
org.freedesktop.Test.Introspectable.Introspect
    Tem1输出:
    method return sender=:1.22 -> dest=:1.25 reply_serial=2
            string "       "">
      
          
      

       "
    用类似的方式继续查找/TesObj下的接口和方法
    Term1命令:$ dbus-send --session --type=method_call --print-reply --dest=org.fmddlmyy.Test
/TestObj org.freedesktop.DBus.Introspectable.Introspect
    Term1输出:
         method return sender=:1.22 -> dest=:1.26 reply_serial=2
             string "         "">
        
             
                 
                       
                    

            

            
                 
                     
                     
                     
                 

                 
                     
                     
                     
                

                
                    
                    
                

           

           
                
                       
                       
                       
                

               

             

             "
    上面的输出不正和Example2中的client端显示的内容类似吗?这是用XML语言显示的,每个<>里是对数据的形式描述,而不涉及数据的内容
    至此,我们用消息总线对象中的标准接口:org.freedesktop.DBus.Intropectable.Intropect得到了我们想要的关于一个连接的足够的信息。
   
    现在,我们可以开始使用dbus-monitor了
    Term2命令:$ dbus-monitor
    Term1命令:$ dbus-send --session --type=methoc_call --print-reply --dest=org.fmddlmyy.Test
/TestObj org.fmddlmyy.Test.Basic
    Term1输出:
    method return sender=:1.21 -> dest=:1.22 reply_serial=2
         int32 1099
    Term2输出:
    signal sender=org.freedesktop.DBus -> dest=(null destination) path=/org/freedesktop/DBus;             interface=org.freedesktop.DBus; member=NameOwnerChanged
         string ":1.22"
         string ""
         string ":1.22"
     method call sender=:1.22 -> dest=org.freedesktop.DBus path=/org/freedesktop/DBus;   interface=org.freedesktop.DBus; member=Hello
     method call sender=:1.22 -> dest=org.fmddlmyy.Test path=/TestObj; interface=org.fmddlmyy.Test.Basic; member=Add
         int32 100
         nt32 999
     method return sender=:1.21 -> dest=:1.22 reply_serial=2
         int32 1099
     signal sender=org.freedesktop.DBus -> dest=(null destination) path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameOwnerChanged
         string ":1.22"
         string ":1.22"
         string ""
     ":1".22就是dbus-send在本次调用中与会话总线所建立的unique connection name。":1.21"是连接“org.fmddlmyy.Test”的unique connection name。上述输出显示:":1.22向"1.21"发送method_call消息,调用Add方法。 ":1.21"通过method_return消息将调用结果发回":1.22"。

说明:以上内容均整理自网上,本文亦为网络共享



    

 


阅读(1454) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:数字类型

给主人留下些什么吧!~~