gpt4 book ai didi

debugging - 打印堆栈跟踪并在 R 中发生错误后继续

转载 作者:行者123 更新时间:2023-12-02 19:07:48 25 4
gpt4 key购买 nike

我正在编写一些 R 代码,这些代码调用其他可能失败的代码。如果是这样,我想打印堆栈跟踪(以追踪出错的地方),然后继续执行。但是,traceback() 函数仅提供有关未捕获异常的信息。我可以通过涉及 tryCatch 和 dump.frames 的相当复杂、巧妙的构造获得我想要的结果,但是没有更简单的方法吗?

最佳答案

我大约一周前编写了这段代码,以帮助我跟踪主要来自非交互式 R session 的错误。它仍然有点粗糙,但它会打印堆栈跟踪并继续。让我知道这是否有用,我对您如何使其提供更多信息感兴趣。我也愿意采用更简洁的方式来获取这些信息。

options(warn = 2, keep.source = TRUE, error = quote({
# Debugging in R
# http://www.stats.uwo.ca/faculty/murdoch/software/debuggingR/index.shtml
#
# Post-mortem debugging
# http://www.stats.uwo.ca/faculty/murdoch/software/debuggingR/pmd.shtml
#
# Relation functions:
# dump.frames
# recover
# >>limitedLabels (formatting of the dump with source/line numbers)
# sys.frame (and associated)
# traceback
# geterrmessage
#
# Output based on the debugger function definition.

# TODO: setup option for dumping to a file (?)
# Set `to.file` argument to write this to a file for post-mortem debugging
dump.frames() # writes to last.dump
n <- length(last.dump)
if (n > 0) {
calls <- names(last.dump)
cat("Environment:\n", file = stderr())
cat(paste0(" ", seq_len(n), ": ", calls), sep = "\n", file = stderr())
cat("\n", file = stderr())
}

if (!interactive()) q()
}))

PS:您可能不希望 warn=2 (警告转换为错误)

关于debugging - 打印堆栈跟踪并在 R 中发生错误后继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1975110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com