array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 spyder 断点调试python代码 - 爱码网

想了一下,觉得需要写这个内容,因为自己折腾了很久,网上内容又超级乱很不全。

进入spyder后,随便打开一个文件
spyder最上栏有如下几个图标
spyder 断点调试python代码
从左到右分别是:

  • debug file (ctrl+f5)
  • run current line (ctrl+f10)
  • step into function or method of current line (ctrl+f11)
  • run until current function or method returns (ctrl+shift+f11)
  • continue execution until next breakpoint (ctrl+f12)
  • stop debugging (ctrl+shift+f12)

即:(记住下面的标号,我以后使用标号表示对应按钮)

  • 1开始调试
  • 2调试当前行(每点击一次执行一行)
  • 3进入当前行对应的函数或方法(下面会解释)
  • 4退出函数或方法(在3进入函数后进行debug,如果已经找到了问题所在想退出函数,可以使用4)
  • 5执行下一个断点(即从一个断点直接进入下一个断点)
  • 6结束调试

举例:

import numpy as np

def fun1():
    a=[1,2,4]
    b=[4,5,2]
    c=a+b
    print(c)
    
def fun2():
    w = -1
    k = 3
    y = np.abs(w*k)
    return y

test1 = fun1()
test2 = fun2()

通常我们写完一个函数之后,如fun1,c=a+b,但是我们想知道这两个相加之后得到的c是不是a,b中对应元素相加,这个时候通常我们可以print©出来看看,但是对于复杂的函数这样非常不方便,每次都要print。鉴于此,我们采用调试的方法。现在我们的目标是:知道函数/方法 fun1中的c是多少。

方法1,设置断点

由于我们要知道的是c,因此直接在c=a+b的下一行设置断点(断点设置方法:直接在要设置行的行数外鼠标左键双击,取消断点也是对着红色小点双击),如:
spyder 断点调试python代码
然后直接点开始调试按钮(即上面提到的标号1),从右下角的console就可以看到已经运行到了那一行(有个箭头指着那一行)
spyder 断点调试python代码
而在右上方直接可以看到变量里面已经出来了a,b,c。然后点击标号6结束即可(下面内容运行完之后重新运行都要先结束,即点击标号6,我将不再强调这一点)
spyder 断点调试python代码
当然我们也可以设置断点在c=a+b那一行,然后点击标号1调试,此时会运行到断点c=a+b这一行(但是记住,当箭头指到这一行的时候是还没执行的,是表示即将执行这一行),我们可以看到右上边的变量a和b都出来了,这个时候我们点击标号2单步执行,这样就可以执行c这一行了,得到上面一行的结果。

方法2,进入函数

进入函数,顾名思义,即如果我们定义一个函数,如fun1(),我们在函数内有一些量,如c=a+b,我们想知道这个量是多少,此时我们可以通过标号3进入函数体内,然后在调试。
此时我们不设置断点(或将断点设置在test1=fun1()这一行),先考虑第一种不设置断点,这样点击标号1调试,右下角的console可以见箭头是指在第一行的import …这一行的。这样点击标号2单步执行,然后我们会看到下一步是def fun1()这一行,(此时点击标号3进入函数是没用的),我们一直点击标号2直到运行到test = fun1(),然后点击标号3进入函数,看到又重新回到了def fun1()这一行。这个时候表示,我们已经进入了函数fun1,所以点击标号2单步执行一直执行到c=a+b这一行的下一行即可。
spyder 断点调试python代码
:注意:

如果我们只是针对某个函数体,如fun1(),更快的方法是,我们直接在test1 = fun1()这一行设置断点,然后在点击标号1调试后,直接点击标号5进入下一个调试点,这个时候直接跳到test1 = fun1(),再执行上面的方法进入函数。

相关文章: