zoukankan      html  css  js  c++  java
  • PyCharm Debug 调试

    一、实验环境

    1.Windows7x64_SP1

    2.anaconda2.5.0 + python2.7(anaconda集成,不需单独安装)

    3.pyinstaller3.0

    二、调试代码

    get_config.py代码如下

    # -*- coding: utf-8 -*-
    import os
    from configparser import ConfigParser,NoSectionError
    
    debug = False
    
    
    def debug_print(str):
        if debug:
            print(str)
    
    
    class GetConfig(ConfigParser):
        def __init__(self,defaults=None):
            """
            初始化函数
            :param defaults:
            """
            ConfigParser.__init__(self,defaults=None)
    
        def optionxform(self, optionstr):
            """
            解决ConfigParser将键值对强制转换为小写问题
            :param optionstr:
            :return:
            """
            return optionstr
    
        def open_file(self,file_name):
            """
            打开config文件夹
            :param file_name: config文件路径
            :return:
            """
            if os.path.exists(file_name):
                debug_print('%s exists' %(file_name))
                self.read(file_name)
                return True
            else:
                debug_print('%s do not exists' % (file_name))
                return False
    
        def get_sections(self):
            """
            获取config中所有section
            :return: section列表
            """
            section = self.sections()
            debug_print(section)
            return section
    
        def check_section(self,*args,**kwargs):
            def check_section_type(*args,**kwargs):
                if isinstance(args[0], str):
                    print('The first parameter (section) must be a string')
                    return
            return check_section_type
    
        @check_section
        def get_options(self,section):
            """
            返回section中所有option
            :param section: 指定section
            :return: option列表
            """
            try:
                options_list = self.options(section)
                return options_list
            except NoSectionError as e:
                debug_print(e)
                return
    
        @check_section
        def get_dicts(self,section):
            """
            返回section中键值对
            :param section: 指定section
            :return: 键值对
            """
            try:
                list_str = self.items(section)
                dict_str = dict(list_str)
                return dict_str
            except NoSectionError as e:
                debug_print(e)
                return
    
        @check_section
        def get_options_match_str(self,section,match_str):
            """
            使用指定字符串匹配option列表
            :param section: 指定section
            :param match_str: 需要匹配的字符串
            :return: 匹配列表
            """
            options_list = self.get_options(section)
            match_list = []
            for each in options_list:
                if match_str in each:
                    match_list.append(each)
            return match_list
    
        @check_section
        def get_para(self,section,key):
            """
            使用section和key索引value
            :param section: 指定section
            :param key: 指定key
            :return: 索引值
            """
            dicts = self.get_dicts(section)
            if dicts:
                result = dicts.get(key,None)
                return result
            else:
                return
    
    
    if __name__ == '__main__':
        debug = True
        config = GetConfig()
        config.open_file('g:gejunpingextract_binToolconfig_block.cfg')
        sections = config.get_sections()
        ret = config.get_para('AM620','AM620_128G')
        print(ret)
        options = config.get_options('AM620')
        print(options)
        match_list = config.get_options_match_str('AM620','PREFIX')
        print(match_list)
        for each_match in match_list:
            print(config.get_para('AM620',each_match))
        dicts = config.get_dicts('AM620')
        print(dicts)
    

      

    config_block.cfg内容如下

    [AM620]
    AM620_128G = 16000
    AM620_256G = 16000
    AM620_512G = 16000
    AM620_1TB = 16000
    
    [AH640]
    AH640_128G = 16000
    AH640_256G = 16000
    AH640_512G = 16000
    AH640_1T = 16000
    

    三、实验步骤

    1、设置断点、取消断点

    • 行号之后、左侧边界之前单击,设置断点
    • 行号之后、左侧边界之前再次单击,取消断点

     2、进入调试界面

    • 代码区域内,右击鼠标,选择其中的Debug ‘xx.py’文件

    • 使用快捷键Alt + shift + F9,选择需要debug的脚本

     3、从断点处单步执行 F8

    • Debug运行后,调试器停止在第一个断点处,每按一次F8,程序单步执行一次。
    • pycharm在代码后自动添加变量值,如下图黄色框框,格式为:变量名:变量类型:变量值

     4、进入函数内部 F7

    • 多次按F8,调试器运行至ret = config.get_para()函数,如下图黄色框框

    • 此时按F7,调试器将进入get_para函数,调试器会打印调用该函数的参数值,如下图黄色框框

     5、只在断点处执行 F9

      程序中设置三处断点,调试器运行后停留在第一个断点处,按一次F9跳至第二个断点,再按一次F9跳至第三个断点。

     综上所述,pycharm调试功能及其强大,可以抛弃在程序中不停添加print语句的做法!

      

  • 相关阅读:
    网络攻防第十一周作业
    网络攻防第十周作业
    网络攻防第九周作业
    网络攻防第八周作业
    网络攻防第七周作业
    网络攻防第六周作业
    网络攻防第五周作业
    网络攻防第四周作业
    网络攻防第三周作业
    20189207《网络攻防实践》第十一周作业
  • 原文地址:https://www.cnblogs.com/hester/p/12066418.html
Copyright © 2011-2022 走看看