调试器不会在断点处停止

7
我正在R中运行一个脚本(使用R Studio),它调用了几个嵌套的函数(脚本调用一个函数,其中有一些代码,然后调用另一个函数等)。我需要调试一个在几个层级下的函数。我可以通过在包含函数调用的那一行上设置断点,然后逐步调试进入第一个被脚本调用的函数。然而,当我尝试重复此步骤以进入下一个函数(即在下一个函数调用的那一行上设置断点),R只会运行代码直到完成。即使使用“continue”命令,该命令声称“继续执行直到遇到下一个断点”,也无济于事。
我可以通过逐行步进,然后一旦到达函数就逐步调试进入每个函数来到达其他函数,但这样做需要花费很长时间才能到达我需要到达的地方。
如有任何想法,请告诉我。
1个回答

1
"

debug非常方便处理编程中的问题。比如,你想逐步执行函数myfun,只需在运行代码之前运行debug(myfun),它会像你在该函数第一行设置断点一样运行。

如果该函数是从其他函数中调用或者在包内部,这个方法同样适用。在后一种情况下,它特别有用,因为你不能直接更改来自包的函数的代码。

"

明白了,谢谢!我得稍微试验一下才能得到我想要的结果。你必须为每个嵌套函数调用debug(myfunc)(而不仅仅是你想要调试的那个函数),并确保myfunc已在当前函数中被引用。 - chtongueek
我认为debug应该在函数内部调用的函数中工作,而不会在调用函数上运行。但是似乎有一些关于包中函数的限制,我之前并不知道。 - Stibu
如果这是一个包的函数(内部函数),我该如何确保它已被资源化? - JelenaČuklina
你应该能够在包中的函数上使用 debug()。例如:debug(layer); ggplot(mtcars) + geom_line(aes(x = disp, y = cyl))。如果你感兴趣的函数没有从包中导出,你必须使用 ::: 符号,例如 debug(ggplot2:::rename_aes) 与上面的 ggplot() 调用一起使用。 - Stibu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接