GVKun编程网logo

pycharm debug如何使用-pycharm进行debug调试的教程(pycharm中debug调试)

14

在这里,我们将给大家分享关于pycharmdebug如何使用-pycharm进行debug调试的教程的知识,让您更了解pycharm中debug调试的本质,同时也会涉及到如何更有效地openstack

在这里,我们将给大家分享关于pycharm debug如何使用-pycharm进行debug调试的教程的知识,让您更了解pycharm中debug调试的本质,同时也会涉及到如何更有效地openstack windows下远程debug调试(pycharm)、pycharm debug、PyCharm Debug 调试、Pycharm Debug 调试心得的内容。

本文目录一览:

pycharm debug如何使用-pycharm进行debug调试的教程(pycharm中debug调试)

pycharm debug如何使用-pycharm进行debug调试的教程(pycharm中debug调试)

pycharm中经常使用debug查找问题,有不少新手用户还不知道pycharm debug如何使用呢,话说不少用户都在咨询这个问题呢?下面就来小编这里看下pycharm进行debug调试的教程吧,需要的朋友可以参考下哦。

pycharm debug如何使用-pycharm进行debug调试的教程

首先打开pycharm软件,导入一个项目,如下图所示

接着打开一个python文件,在要debug的地方添加一个断点,如下图所示

然后点击顶部的Run菜单,选择Debug选项,如下图所示

接着程序运行到debug的地方就会自动停止,显示一个蓝色的条,如下图所示

然后在底部可以控制断点一步步的走,如下图所示

最后要终止断点点击左侧的按钮即可,如下图所示

以上就是pycharm进行debug调试的教程,希望大家喜欢哦。

openstack windows下远程debug调试(pycharm)

openstack windows下远程debug调试(pycharm)

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客:blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。


环境:windows7、pycharm3.4.1、centos6.5(部署openstack icehource版)

1、在windows机器安装pycharm
将windows pycharm安装目录下的pycharm-debug.egg拷贝到centos机器(如果centos的python为3版本以上,则拷贝pycharm-debug-py3k.egg):
在centos6.5安装debug egg:
easy_install pycharm-debug.egg


2、配置windows pycharm的远程调试配置(Run -> Edit configurations...):
注:其中Local host name为:windows本机当前ip地址。port为:当前pycharm用来监听远程debug连接的端口。(其中path mapping可以先不用设置)


3、pycharm启动远程debug监听远程调试:
点击右上角出现的刚刚配置的debug:

下面窗口将出现:
 
4、将Waiting for connection...上面的两句代码copy到对应断点调试代码中:
     
 
     
 
     
 
      
      
import pydevd
pydevd.settrace(''192.168.1.133'', port=51234, stdoutToServer=True, stderrToServer=True)
接下来以nova的get_all实例为例调试:
     
 
     
 
     
 
      
      
vim /usr/lib/python2.6/site-packages/nova/compute/api.py 
添加上述内容后api代码如下:
5、重启nova服务nova-api、nova-compute,执行:nova list命令,或者dashboard点击获取instance的页签:
远程debug连接到pycharm,进入了调试模式。
6、此处发现pycharm并没有进入到get_all 断点调试的代码处,而是进入了thread.py的线程文件,这是因为nova底层代码
使用的eventlet多线程(协程)导致,解决此问题参考如下:
grep -rn ''eventlet.monkey_patch''  /usr/lib/python2.6/site-packages/nova

     
     
vim /usr/lib/python2.6/site-packages/nova/cmd/__init__.py

    

    

    

     
     

import eventlet
from nova import debugger
if debugger.enabled():
    # turn off thread patching to enable the remote debugger
    eventlet.monkey_patch(os=False, thread=False)
else:
    eventlet.monkey_patch(os=False)
替换为:
import eventlet
from nova import debugger

if debugger.enabled():
    # turn off thread patching to enable the remote debugger
    eventlet.monkey_patch(os=False, thread=False)
else:
    eventlet.monkey_patch(os=False, thread=False)
注:由于上述步骤中,将多线程关闭了,所以之后如果涉及到多线程协作流程(例如一次性创建多个虚拟机),将可能出现错误。



     
     
安装之前步骤,重启服务nova-api、nova-compute,nova list 即可以看到正常的调试代码:
补充:pycharm可以将本机代码和远程代码进行映射(Edit Path Mapping),就不用每次去远程下载远程:
补充、如果还是不能正常调试,请将pycharm安装文件内容替换:
将:
SUPPORT_GEVENT = os.getenv(''GEVENT_SUPPORT'', ''False'') == ''True''
替换为:
SUPPORT_GEVENT = True




pycharm debug

pycharm debug

debug相关功能怎么用

F8:step over 单步

遇到断点后,程序停止运行,按F8单步运行。

F7:step into 进入

配合F8使用。单步调试F8时,如果某行调用其他模块的函数,在此行F7,可以进入函数内部,如果是F8则不会进入函数内容,直接单步到下一行。

Alt+shift+F7:step into mycode,

个人理解F8和F7的综合。1、没遇到函数,和F8一样;2、遇到函数会自动进入函数内部,和F8时按F7类似的

shift+F8:跳出

调试过程中,F7进入函数内后,shift+F8跳出函数,会回到进入前调用函数的代码。不是函数地方shift+F8跳出,怎么用没太明白,但最终会执行到结束。

F9:resume program

按翻译是重启程序 ,实际是 下个断点,当打多个断点是,F9会到下一个断点

alt+F9:run to cursor

常用:

F8,F9,其次Alt+shift+F7,或 F7,shift+F8

PyCharm Debug 调试

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:\gejunping\extract_bin\Tool\config_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 语句的做法!

 

 

 

 

 

  

Pycharm Debug 调试心得

Pycharm Debug 调试心得

1-1. 添加断点:直接在标记处点击鼠标左键即可。(删除断点只需再点击断点处即可)

 

 1-2.Debug 下运行代码:如图所示

 

 

1-3. 按照所需调试进行代码调试。Debug 的调试方式如下所示

 

 

分别为:

1.show execution point (F10)  显示当前所有断点

2.step over (F8)  单步调试。

若函数 A 内存在子函数 a 时,不会进入子函数 a 内执行单步调试,而是把子函数 a 当作一个整体,一步执行。

(代码调试顺序可参考下图。)

 

 

3.step into (F7) 单步调试。

 

若函数 A 内存在子函数 a 时,会进入子函数 a 内执行单步调试。

(代码调试顺序可参考下图。)

 

 

4.step into my code (Alt + Shift +F7) 执行下一行但忽略 libraries(导入库的语句)(目前感觉没什么用)

5.force step into (Alt + Shift +F7) 执行下一行忽略 lib 和构造对象等  (目前感觉没什么用)

6.step out(Shift+F8)当目前执行在子函数 a 中时,选择该调试操作可以直接跳出子函数 a,而不用继续执行子函数 a 中的剩余代码。并返回上一层函数。

7.run to cursor (Alt +F9) 直接跳到下一个断点

关于pycharm debug如何使用-pycharm进行debug调试的教程pycharm中debug调试的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于openstack windows下远程debug调试(pycharm)、pycharm debug、PyCharm Debug 调试、Pycharm Debug 调试心得等相关知识的信息别忘了在本站进行查找喔。

本文标签: