tuxedo服务的dbx debug

环境:SunOS 5.9 

         Tuxedo 9.1

         Sun  Stido 12 

         C++

 

 

第一步:完成服务端的编写和编译,连接。

             可以使用makefile来做,如果懒得用makefile来做的话,可以这样

              >vi $HOME/.profile

                 修改其中的CC,使其为‘CC -compat -g’   -g表示指示编译在编译期间生成调试信息,否则就不能在dbx中看到源代码

              >./.profile

                 使上面的修改生效,如果没有权限,则可以退出当前session,再重进一下就可以

              >buildserver -f yourserver.cpp -s YOURSERVER -o YOURSERVER

                 这样就能生成带有调试信息的可执行文件

 

第二步:服务ONLINE

             >tmshutdown -s YOURSERVER

             >tmboot -s YOURSERVER

                   上面的操作只会关掉你的服务,对同一个tuxedo内的其他的服务没有影响。

         

     

             如果上面的操作不能成功,可以清除ipc资源(注意,这样整个tuxedo就关掉了,需要慎重)

             >tmipcrm

             >tmboot

 

第三步:得到进程号

            查看进程号(PID号)

            >ps -e |grep YOURSERV          

                  注意上面是'YOURSERV'而不是'YOURSERVER',因为ps显示进程名时,会自动截断为8个字符

                  从上面中找到你的服务的进程号,假设为12319

           

第四步:进行调试

            >dbx

            >attach 12319                    dbx到程序进程,连接完成后,程序就停止运行

             >file yourserver.cpp            (这一步必须有,否则,你看不到自己的代码)

             >list                                   (显示程序代码)

             >stop at 123                      (设置断点在123行)

             >cont                                 (运行程序,attach命令后,程序就停止运行,在客户端发送服务请求前,用 cont使程序开始运行)

                 客户端发起服务请求,可以看到如下内容,这表示程序已经在123行这个断点处停下了

                  t@1 (l@1) stopped in YOURSERVER at line 120 in file "yourserver.cpp"
                 123        unsigned char *bfr = (unsigned char*)rqst->data;

  

  

 

 

             在dbx中就可以看到,服务端程序停在123行

             >print len           len为变量,下面能看到len的值,编码为10进制编码

                len = 1036

            

             >print p              p为指针,  0x66037为input的值,“C”为p所指向内容的值,也就是*p

                p = 0x66037 "C"       

            

             >print input[0..4:2]     input为数组或者指向数组的指针,输出0到4之间的元素,间隔为2,也可以input[0..4],输出所有元素
                input[0..4:2] =
                [0] = '/0'
                [2] = ';'
                [4] = 'A' 

 

             >next   进入下一步,如果当前位置是一个方法,不会进入方法中,而是执行完方法,然后进入下一行

                        

             >step   进入下一行代码,如果当前位置有方法调用,会进入方法中进行调试

 

 

            >cont     已经得到所有信息,让服务程序继续运行,如果后面还有客户端发起请求,则还会在前面设置的断点处停止

 

            >detach  接触dbx与服务程序程序的连接。

 

 

 

 

 

           

            

  

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值