点击行号的左侧,即可设置断点(或者按下Shift+F9),如果没有出现,反而出现下图的警告:
那么只是因为我的坏习惯——写一段脚本测试的时候都是新建,但不save到本地,不喜欢保存,写的差不多了才开始取名字保存....
写一个for循环测试下:
  1. test <- 0
  2. for(i in 1:9){
  3. j <- i+2
  4. test[i+1] <- test[i]+3
  5. k <- i
  6. }
将environment窗口下,选择grid(如果选来是list的话,换到grid方便查看变量的值)
第一步 
点击脚本窗口的source
(注意,不是run/ctrl+enter,如果这样运行断点是不会发挥作用的)

 绿色箭头指向的是当前的停留在的行,即#4代表的第四行代码
在控制台输入n或者点击next,即可运行下一句。(其实我们可以看到,这个断点和我们直接在那个地方加一句browse()代码的效果是一样的)
第二步

 所以,我们注意到,点击下一句的时候,绿色箭头指向了下一句,上一句才被执行。
也就是说,当前显示#5,其实上是#5没有执行,只要#5之前的执行了。
第三步
 第四步:
其实是从第二次开始:
  1. {
  2. .doTrace(browser())
  3. test[i + 1] <- test[i] + 3
  4. }
把他们组合在一起了,然后第五步和第六步就是分别进入这两步。
第五步:
 第六步:
 第七步(回归到一般的代码顺序逻辑):
第八步
 
 按下stop或者输入大写的Q,推出debug模式。

如果我们在第一步之后就按下continue按钮
 那么相当于我们输入一个c和n
continue的作用是执行,直至遇到下一个断点的位置。
所以呢,我们真正调试的时候一般还是用continue较多吧。

上面为止的是Editor breakpoints
Editor breakpoints work by injecting some tracing code into the R function object. 
(所以之前看到了.doTrace)

-------------------------------------------------------------------------------------------
接下来是
也就是在函数里,那么是这种空心红点,且伴随有警告,
(其实反正就算是之前的Editor breakpoints也是需要source才生效,我觉得这个警告有点多余啊)
如果我们修改了内容,会出现如下的警告。
 
 ctrl+S保存即可,那么也就是说,我们每次修改,都应该重新source才可进行调试的,这很正常啊。
当我们调试结束后,会发现变成如下情况:
此后,如果我们再通过testDebug()语句调用函数,那么函数内部的这个断点就开始起作用啦~
而且此后,我们再在函数内添加断点,就都是Editor breakpoints
(The circle outline indicates that RStudio is aware of the breakpoint, but that it hasn’t been injected. In most cases, you can source() the file to resolve the problem.但是呢,并不如他所说,其实通过source并未能直接解决问题,而是更显麻烦的一点点运行)

-------------------------------------------------------------------------------------------
browser()——直接run/或者ctrl+enter即可,无需source
browser()可以看作最低水平的调试工具,它是你代码的一部分,不依赖于工具和环境的。
browser()虽然原始,但是在一些按条件调试的情况下还是蛮有用的
  1. for (i in 1:10) {
  2. if (i == 5)
  3. browser()
  4. }
这里的意思是,从i等于5开始调试(不是仅有i=5的时候调试一次哦~),直至一个循环或者函数结束,调试结束。(参考的文章中的start_work()压根没有这个函数呃)

-------------------------------------------------------------------------------------------
debugonce()——直接run/或者ctrl+enter即可,无需source
比如:
  1. library(fGarch)

  2. debugonce(fGarch::garchFit)
  3. # debugonce(fGarch::.garchArgsParser)
  4. # debugonce(fGarch::.garchFit)
  5. da=read.table("m-intcsp7309.txt",header=T)
  6. intc=log(da$intc+1)
  7. m4=garchFit(~1+garch(1,1),data=intc,trace=F)
由于有了debugonce(包名::包中的函数)
当执行到m4=garchFit(~1+garch(1,1),data=intc,trace=F)一行的时候,会自动进入调试模式
如果我们还想调试garchFit中的.garchArgsParser函数和.garchFit函数,只要在运行前写上即可(上面的代码块中已经注释掉了)

debugonce() sets a one-shot breakpoint–that is, the function will enter the debugger the very next time it runs, but not after that. If you want to debug a function every time it executes, call debug(...) on the function. Call undebug(...) on the function when you no longer want to debug the function each time it executes. 
debugonce(x)设置后,一旦x函数运行,就会进入调试器。
                       ——(只执行一次)
如果想要x函数每次执行都进入调试器,那么只要在想要这么做的地方的最开始放上debug(x),末尾处放上undebug(x),那么他们之间的代码块,只要遇上x函数被执行,都会进入调试器
                       ——(执行多次)
debug(x)
   代码块
undebug(x)

-------------------------------------------------------------------------------------------
If you’re diagnosing a specific error, you can have RStudio halt execution at the point where the error is raised. To do this, go to Debug -> On Error and change the value from “Error Inspector” to “Break in Code”.
让Rstudio在发生错误的那一行代码处停止执行。
只需要在debug——on error——选择break in code 
可是我修改之后然并卵啊,试验了很久都没倒腾出来....
存疑,欢迎指正!

To keep the the debugger from being invoked whenever any error anywhere happens, RStudio does not invoke the debugger if it looks like none of your own code is on the stack. If you find that this is excluding an error you want to catch, go to Tools -> Global Options and uncheck “Use debug error handler only when my code contains errors”.
  1. options(error = browser())
  2. test <- 0
  3. for(i in 1:9){

  4. plot("abc")
  5. j <- i+2
  6. test[i+1] <- test[i]+3
  7. k <- i
  8. }
 取消这个打钩(且有勾选break in code),上述的代码运行完,会自动进入调试模式。
options(error = browser())   ——设置完后,任意error都会进入调试模式
options(error = NULL)         ——还原上一个命令,不然每个错误都进入太累了

-------------------------------------------------------------------------------------------
调试器:
n or Enter F10 Execute next statement   可以按下回车键,直接运行下一步
s Shift+F4 Step into function             即第二个按钮,进入函数
f Shift+F6 Finish function/loop          结束该函数或循环
c Shift+F5 Continue running             继续执行直到下一个断点
Q Shift+F8 Stop debugging               停止调试

那么先到这里,这部分太基础了,之后我结合Rstudio的调试器以fGarch模型中的garchFit函数具体来说明更实用的调试过程,这样有助于我们高效地查看源码,我感受到了老司机的召唤!

本文参考:

使用RStudio调试(debug)基础学习(一)的更多相关文章

  1. 使用RStudio调试(debug)基础学习(二)和fGarch包中的garchFit函数估计GARCH模型的原理和源码

    一.garchFit函数的参数--------------------------------------------- algorithm a string parameter that deter ...

  2. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

  3. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  4. AspectJ基础学习之一简介(转载)

    AspectJ基础学习之一简介(转载) 一.为什么写这个系列的博客   Aspectj一个易用的.功能强大的aop编程语言.其官网地址是:http://www.eclipse.org/aspectj/ ...

  5. opengl基础学习专题 (二) 点直线和多边形

    题外话 随着学习的增长,越来越觉得自己很水.关于上一篇博文中推荐用一个 学习opengl的 基于VS2015的 simplec框架.存在 一些问题. 1.这个框架基于VS 的Debug 模式下,没有考 ...

  6. [iOS]关于零基础学习iOS开发的学习方法总结

    关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ...

  7. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  8. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  9. salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

    注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...

随机推荐

  1. qt 操作注册表,设置ie代理

    void SetIEProxy(QString proxy) { QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Wi ...

  2. FastJson一些常见方法(API):处理JSON变得好简单

    fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果说明比gson快大约6倍 JSON帮助类 这个可以做一个实例研究代码,也可以作为一个工具类 ...

  3. RoR - Advanced Querying

    Seeding the Database: db/seed.rb 可以提供预设data rake db:seed #seeds.rb Person.create! [ {first_name : &q ...

  4. angular--解决angular图片加载失败问题

    基于angular4写的一个指令,在ionic3.x项目在用.因为加载图片超时等原因导致图片显示不出来,需要替换成默认或者指定图片 1.err-src.ts import { Directive,In ...

  5. MAVEN_day01 下载与安装及环境变量的配置

    一.MAVEN简介 MAVEN是apache组织下的一个开源项目,是使用纯java编写的,之用于管理java工程. 二.MAVEN下载与安装 下载地址:http://maven.apache.org/ ...

  6. 【UML】NO.50.EBook.5.UML.1.010-【UML 大战需求分析】- 考勤系统

    1.0.0 Summary Tittle:[UML]NO.50.EBook.1.UML.1.010-[UML 大战需求分析]- 考勤系统 Style:DesignPattern Series:Desi ...

  7. 2018-2019-1 20189203《Linux内核原理与分析》第三周作业

    一.课程学习 计算机的三个法宝:存储程序计算机.函数调用堆栈.中断. 堆栈相关的寄存器:ESP(堆栈指针).EBP(基址指针). 堆栈操作:push:栈顶地址减少4个字节,并将操作数放入栈顶存储单元. ...

  8. 用python写多线程

    import threading #首先导入threading 模块,这是使用多线程的前提 from time import ctime,sleep def music(func): ): print ...

  9. Cocos Creator Slider(进度条)的三种实现

    实现原理: 方法一:动态计算,slider上增加背景图,根据滑动的进度动态计算背景图的大小:方法二:slider+progress,根据slider滑动的进度,动态改变progress的显示进度:方法 ...

  10. Python3.0以上版本在对比图片相似中的应用

    首先声明一下,代码是从网上找到的,只是本人作以简单的修改. 请大家尊重原创. 我本地用到的是 Python 3.4   以及 Pillow (4.0.0)  第三方包. 方法一. #!/usr/bin ...