乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python如何實(shí)現(xiàn)單步調(diào)試

       靜幻堂 2018-09-15
      2017年08月08日 19:38:11 ugug654 閱讀數(shù):1664

          遇到大型python項(xiàng)目,如何定位問題和監(jiān)控程序的運(yùn)行狀態(tài)是一個(gè)程序員必須掌握的技能,今天小編為你帶來python程序的單步調(diào)試方法,方便易用,簡(jiǎn)單易記!

      首先你需要在所調(diào)試程序的開頭中:import pdb 并在你的代碼行設(shè)置斷點(diǎn):pdb.set_trace()

      def get_input(Data, SuiteID, CaseID, caseinfolist):  
          global sArge
          sArge=''
          args = []  
          #對(duì)于get請(qǐng)求,將參數(shù)組合  
          if reqmethod.upper()=='GET':
              for j in range(0, caseinfolist[1]):  
                  if Data.read_data(SuiteID, Data.casebegin+CaseID, Data.argbegin+j) != "None": 
                      ArgValue =  Data.read_data(SuiteID, Data.casebegin+CaseID, Data.argbegin+j)
                      if '$$' in ArgValue:#走關(guān)聯(lián)分支
                          args = ArgValue.split('$$')
                          #print args
                          corvalue = Correl(args[0], args[1], args[2])
                          pdb.set_trace()   #######這兒設(shè)置斷點(diǎn),程序運(yùn)行到此處就開始了單步調(diào)試###########
                          if corvalue == []:
                              sArge = 'correlerr'
                              #return sArge
                              #infolog="關(guān)聯(lián)失敗"
                              #ret1 = 'NG'
                              #Data.write_data(SuiteID, Data.casebegin+CaseID, 15,infolog,NG_COLOR)
                              #write_result(Date, SuiteID, Data.casebegin+CaseID, 16, ret1)
                          else:
                              sArge=sArge+caseinfolist[2][j]+'='+corvalue[0]+'&'                        
                      else:
                          sArge=sArge+caseinfolist[2][j]+'='+ArgValue+'&'
                      #print sArge
              #去掉結(jié)尾的&字符  
              if sArge[-1:]=='&':  
                  sArge = sArge[0:-1]     
              #sInput=caseinfolist[0]+sArge    #為了post和get分開方便,不在這里組合接口名,在調(diào)用的地方組合接口名。
              return sArge 
          #對(duì)于post請(qǐng)求,因?yàn)椴恢肋B接格式是=還是冒號(hào),或者是其他的格式,所以不做拼接。直接取參數(shù)的第一個(gè)作為上傳body。
          else:
              sArge=Data.read_data(SuiteID, Data.casebegin+CaseID, 3)
              if '$$' in sArge:#走關(guān)聯(lián)分支
                  args = sArge.split('$$')
                  #print args
                  corvalue = Correl(args[0], args[1], args[2])
                  if corvalue == []:
                      sArge = 'correlerr'
                      return sArge
                  else:
                      return sArge

      程序開始之后pdb調(diào)試界面:

      > c:\users\wangchao\workspace\interface_test\testframe.py(253)HTTPInvoke()
      -> if reqmethod.upper()=="GET":
      (Pdb) l                               #執(zhí)行命令l,會(huì)顯示出當(dāng)前代碼的上下文,下面的‘->’就是當(dāng)前即將執(zhí)行的代碼
      248      def HTTPInvoke(url,requestUri):
      249          proto,rest=urllib.splittype(url)
      250          host,rest =urllib.splithost(rest)
      251          conn = httplib.HTTPConnection(host)  
      252          pdb.set_trace()
      253  ->        if reqmethod.upper()=="GET":
      254              print url
      255              conn.request(reqmethod.upper(), url,headers=reqHeaders)
      256              rsps = conn.getresponse()
      257              if rsps.status==200:
      258                  data = rsps.read()
      (Pdb) reqmethod.upper() #可以直接輸入相關(guān)變量名稱來查看當(dāng)前變量的值
      'GET'
      (Pdb) n #n就是next的意思就是執(zhí)行下一行
      > c:\users\wangchao\workspace\interface_test\testframe.py(254)HTTPInvoke()
      -> print url
      (Pdb) b 260 #設(shè)置斷點(diǎn)
      Breakpoint 1 at c:\users\wangchao\workspace\interface_test\testframe.py:260
      (Pdb) n
      > c:\users\wangchao\workspace\interface_test\testframe.py(254)HTTPInvoke()
      -> print url
      (Pdb)
      http://yue.sogou.com/api/h5/v1/history/recharge/list?pageNo=1&pageSize=1
      > c:\users\wangchao\workspace\interface_test\testframe.py(255)HTTPInvoke()
      -> conn.request(reqmethod.upper(), url,headers=reqHeaders)
      (Pdb) s # 上面通過執(zhí)行n程序運(yùn)行到調(diào)用函數(shù)的地方,使用s可以進(jìn)入函數(shù)內(nèi)部
      --Call--
      > c:\python27\lib\httplib.py(1040)request()
      -> def request(self, method, url, body=None, headers={}):
      (Pdb) a # 顯示當(dāng)前所有棧變量的值
      self = <httplib.HTTPConnection instance at 0x03A8CE68>
      method = GET
      url = http://yue.sogou.com/api/h5/v1/history/recharge/list?pageNo=1&pageSize=1
      body = None
      headers = {'Connection': 'keep-alive', 'Cookie': 'SUV=004C0C0F6FCA67CB585CD8F53FC5D135; CXID=647977743F187E018526B8ECA587A052; IPLOC=CN1100; OPENID=6D4569C5D00A35876E60A94E34D685AD; pgv_pvi=2641157120; _ga=GA1.2.2141014782.1484890447; ssuid=5496173722; SMYUV=1485154923097202; sgsa_id=sogou.com|1486180882291442; GOTO=Af99046; clientId=291C8B8E05B2647F206981AD04136539; JSESSIONID=aaa_iPLt7BVjahJ1G5GOv; SNUID=FB57E5402F2A672762F7CB303085C13A; ld=uRGSyZllll2YYa4WlllllVAtUeYlllllWTieMkllll9llllljylll5@@@@@@@@@@; LSTMV=316%2C266; LCLKINT=3486; sct=61; ad=jkllllllll2Yg2o@lllllVANab9lllllbDIXhZllllwllllljOxlw@@@@@@@@@@@; SUID=7BC6CA017F430E0A0000000052256039; YYID=AA6E39EBC7D6CC4AA0839B4929E7511C; usid=pp63hL5QOQSxi2gw; sgid=AViadNOrPzjYb8SzAw5wsq5g', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0'}
      (Pdb) l
      1035                 self.__state = _CS_REQ_SENT
      1036             else:
      1037                 raise CannotSendHeader()
      1038             self._send_output(message_body)
      1039     
      1040 ->        def request(self, method, url, body=None, headers={}):
      1041             """Send a complete request to the server."""
      1042             self._send_request(method, url, body, headers)
      1043     
      1044         def _set_content_length(self, body, method):
      1045             # Set the content-length based on the body. If the body is "empty", we
      (Pdb) r #命令r返回到前面所進(jìn)入函數(shù)的末尾
      --Return--
      > c:\python27\lib\httplib.py(1042)request()->None
      -> self._send_request(method, url, body, headers)
      (Pdb) l # 可以通過l驗(yàn)證一下當(dāng)前程序執(zhí)行的位置
      1037                 raise CannotSendHeader()
      1038             self._send_output(message_body)
      1039     
      1040         def request(self, method, url, body=None, headers={}):
      1041             """Send a complete request to the server."""
      1042 ->            self._send_request(method, url, body, headers)
      1043     
      1044         def _set_content_length(self, body, method):
      1045             # Set the content-length based on the body. If the body is "empty", we
      1046             # set Content-Length: 0 for methods that expect a body (RFC 7230,
      1047             # Section 3.3.2). If the body is set for other methods, we set the
      (Pdb) r # 再執(zhí)行r返回到調(diào)用該函數(shù)的地方
      > c:\users\wangchao\workspace\interface_test\testframe.py(256)HTTPInvoke()
      -> rsps = conn.getresponse()
      (Pdb) l
      251          conn = httplib.HTTPConnection(host)  
      252          pdb.set_trace()
      253          if reqmethod.upper()=="GET":
      254              print url
      255              conn.request(reqmethod.upper(), url,headers=reqHeaders)
      256  ->            rsps = conn.getresponse()
      257              if rsps.status==200:
      258                  data = rsps.read()
      259                  data = str(data)  
      260 B                conn.close()  
      261                  return data
      (Pdb) c #執(zhí)行命令c繼續(xù)運(yùn)行程序,直到斷點(diǎn)就停留在此位置,上面設(shè)置斷點(diǎn)的命令“b 260”260表示第多少行
      > c:\users\wangchao\workspace\interface_test\testframe.py(260)HTTPInvoke()
      -> conn.close()
      (Pdb) l
      255              conn.request(reqmethod.upper(), url,headers=reqHeaders)
      256              rsps = conn.getresponse()
      257              if rsps.status==200:
      258                  data = rsps.read()
      259                  data = str(data)  
      260 B->                conn.close()  
      261                  return data
      262              elif rsps.status==301 or rsps.status==302:
      263                  headerstr=rsps.getheaders()
      264                  for i in headerstr:
      265                      if i[0].lower()=='location':
      (Pdb) pp data # pp 打印某個(gè)變量的值
      '{"code":0,"data":{"pageCount":0,"pageList":[],"pageNo":1,"pageSize":1,"totalCount":0},"msg":"\xe6\x88\x90\xe5\x8a\x9f"}'
      (Pdb)

      總結(jié):上面的程序是本人私有,因而不能全部上傳,在練習(xí)pdb時(shí),建議使用自己的程序,pdb單步調(diào)試方法總結(jié)如下:

      命令

       

      解釋

      break 或 b 設(shè)置斷點(diǎn)

      設(shè)置斷點(diǎn)

      continue 或 c

      繼續(xù)執(zhí)行程序

      list 或 l

      查看當(dāng)前行的代碼段

      step 或 s

      進(jìn)入函數(shù)

      return 或 r

      執(zhí)行代碼直到從當(dāng)前函數(shù)返回

      exit 或 q

      中止并退出

      next 或 n

      執(zhí)行下一行

      pp

      打印變量的值

      a

      查看全部棧內(nèi)變量

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多