Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不重新编译的情况下添加断点来调试R包_R_R Package - Fatal编程技术网

如何在不重新编译的情况下添加断点来调试R包

如何在不重新编译的情况下添加断点来调试R包,r,r-package,R,R Package,当我开发一个R包时,我会做以下事情: 加载最新版本 使用它 意识到说函数“f_bug”中有一个bug 试着调试 如果我可以“重新编写”f_bug,并且选择新的源代码版本(我会在后面重新编译干净的包),我会很容易 但是我不能这样做,看起来在另一个包函数中调用时,package::f_bug在默认情况下总是“选中”的 我可以做这样的事情吗?您不能使用RStudio方便的图形断点,但您可以使用跟踪来做同样的事情: trace(package::f_bug, browser, at = insertio

当我开发一个R包时,我会做以下事情:

  • 加载最新版本
  • 使用它
  • 意识到说函数“f_bug”中有一个bug
  • 试着调试
  • 如果我可以“重新编写”f_bug,并且选择新的源代码版本(我会在后面重新编译干净的包),我会很容易

    但是我不能这样做,看起来在另一个包函数中调用时,
    package::f_bug
    在默认情况下总是“选中”的


    我可以做这样的事情吗?

    您不能使用RStudio方便的图形断点,但您可以使用
    跟踪来做同样的事情:

    trace(package::f_bug, browser, at = insertion_point)
    
    此处插入点不是指行号,而是指子步向量。从
    ?跟踪

    查看“as.list(body(f))”以获取数字 与函数“f”中的步骤关联。)


    另一个选项可能是使用
    utils::setBreakpoint
    ,它以文件名和行号作为参数。有关详细信息,请参阅帮助文件。

    重建后,您是否再次尝试加载它?!这就是我不想在每次设置断点时都重建它的要点!可能是从命令行:
    trace(package::f\u bug,browser,at=line\u您希望\u插入\u断点\u at)
    ah!我会试试看,看起来不错。你能只跟踪一次吗?
    trace
    会一直保持,直到你使用
    untrace
    ,我认为没有与
    debugonce
    等效的方法。