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语句的做法!

  

原文地址:https://www.cnblogs.com/hester/p/12066418.html