打印堆栈跟踪

2023-12-15

我有一个非常短的测试文件:

let print_backtrace () = try raise Not_found with
    Not_found -> Printexc.print_backtrace stdout;;

let f () = print_backtrace (); Printf.printf "this is to make f non-tail-recursive\n";;

f ();

我编译并运行:

% ocamlc -g test.ml      
% OCAMLRUNPARAM=b ./a.out
Raised at file "test.ml", line 1, characters 35-44
this is to make f non-tail-recursive

为什么不是f在堆栈跟踪中列出?如何编写一个函数来打印调用它的位置的堆栈跟踪?


的文档Printexc.print_backtrace says:

回溯列出了最近引发异常的程序位置以及通过函数调用传播异常的位置。

它实际上似乎在做正确的事情。异常尚未通过 f 传播回来。

如果我将通话转移到Printexc.print_backtrace呼叫之外f,我看到完整的回溯。

$ cat test2.ml
let print_backtrace () = raise Not_found

let f () = let res = print_backtrace () in res ;;

try f () with Not_found -> Printexc.print_backtrace stdout
$ /usr/local/ocaml312/bin/ocamlc -g test2.ml
$ OCAMLRUNPARAM=b a.out 
Raised at file "test2.ml", line 1, characters 31-40
Called from file "test2.ml", line 3, characters 21-39
Called from file "test2.ml", line 5, characters 4-8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打印堆栈跟踪 的相关文章

  • Windows批处理支持异常处理吗?

    Windows批处理编程支持异常处理吗 如果没有 是否有任何方法可以有效地模拟批处理文件中的异常处理 我希望能够在批处理脚本中的任何 CALL 级别的任何位置 抛出异常 并重复弹出 CALL 堆栈 直到找到活动的 TRY 块 然后 CATC
  • C++ 将枚举值捕获为异常

    我正在尝试使用external C 库将其异常定义为 enum MY ERRORS ERR NONE 0 ERR T1 ERR T2 然后在代码中抛出异常是这样的 if throw ERR T1 作为 C 编程新手 我会这样做 try ca
  • Python Tornado 中的异常处理

    我正在尝试处理发生的异常AsyncClient fetch这样 from tornado httpclient import AsyncHTTPClient from tornado httpclient import HTTPReques
  • ScrollView 只能承载一个直接子级,但它只有一个

    每当我开始活动时 我都会收到此错误 这是完整的堆栈跟踪 Process com example PID 28799 java lang RuntimeException Unable to start activity ComponentI
  • Cython:返回类型化内存视图的函数的异常类型

    In a cdef函数的签名 cdef const unsigned char my fn input except 如果我理解的话文档 http cython readthedocs io en latest src userguide
  • 为什么 main() 中的 try-catch 不好?

    有人可以向我解释为什么在 main 方法中使用 try catch 来捕获未处理的异常被认为是不合适的吗 STAThread static void Main try Application Run new Form1 catch Exce
  • 如何正确关闭保存文件句柄

    我正在开发一个与 USB 设备通信的 C 项目 我打开连接 DllImport Kernel32 dll SetLastError true static extern Microsoft Win32 SafeHandles SafeFil
  • Meteor 抛出 throwIfSelectorIsNotId 异常

    运行某些代码时 Meteor 会抛出 throwIfSelectorIsNotId 异常 我有两个客户端运行相同的代码 当第二个客户端运行相同的代码时会引发异常 无法弄清楚这个异常的含义以及抛出的原因 希望有人能够解释一下 对于客户端上的某
  • 返回值的复制省略和 noexcept

    我有一个这样的函数模板 template
  • 从 ADF Faces JSF 1.2 中的托管 bean 构造函数导航

    是否可以从托管 bean 的构造函数导航到另一个页面 视图 如果发生任何异常 我希望进行此重定向 我尝试了很多方法 Try 1 getFacesContext responseComplete getFacesContext getAppl
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • PHP MVC 应用程序中哪里可以捕获异常?

    我有一个中小型 PHP 应用程序 用于练习 OOP 和 MVC 技能 我有初始化 引导程序调用的文件Router谁打电话控制器 gt 服务层 gt 存储库 数据库 然后将变量发送回视图层 所有依赖项均由 DiC IOC 处理 我创建抽象类
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack
  • 为什么 try catch 块没有捕获 Promise 异常?

    我对承诺的错误处理感到困惑 答案可能很明显 但我不明白 我有以下示例代码 var test async function throw new Error Just another error try test then catch err
  • Asp.net mvc 重写基本控制器中的 OnException 不断传播到 Application_Error

    我试图返回一个视图 而不是根据我的应用程序可能发生的某些错误向用户发出重定向 我想处理错误 将它们记录在我的基本控制器中 我不希望错误传播到我的Global asax Application Error 方法 因为我希望此方法处理我的应用程
  • 无法以编程方式反序列化 SOAP 消息

    当我尝试反序列化肥皂消息时 出现以下异常 我这样做是因为我有想要在测试中重用的响应文件 我无法使用真正的服务等 因为它不适合我们拥有的测试框架的架构 Test MyUnitTestMethod failed System InvalidOp
  • java异常处理策略[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • 捕获特定的 WebException (550)

    假设我创建并执行一个System Net FtpWebRequest 我可以用catch WebException ex 捕获此请求引发的任何与 Web 相关的异常 但是 如果我有一些逻辑只想在由于以下原因引发异常时执行 550 file
  • 尝试抓住最后的问题

    在 Try Catch Final 块中 无论发生什么情况 finally 块总是执行 还是仅当 catch 块不返回错误时才执行 我的印象是 只有当 catch 块没有错误地通过时 finally 块才会执行 如果 catch 块因错误而

随机推荐

  • 从 data.frame 中提取行

    我有一个 n mdata frame其中第 1 列包含感兴趣的信息 我想创建子data frames 基于第 1 列的行中的值 Example P Cat Q S nth Column S data data data data S A I
  • C# 中的“静态方法”是什么?

    将 static 关键字添加到方法中意味着什么 public static void doSomething Well do something 你可以添加static类的关键字 那意味着什么 A static函数 与常规的 instanc
  • GridView:如何制作固定标题行

    需要固定垂直滚动条的标题行 因为我的 GridView 非常大 制作 2 个面板是我最好的尝试 但也行不通 added
  • 如何将匹配器添加到 HttpSecurity spring web secure

    我尝试实现spring security 但是我有很多角色和权限 然后我想将角色动态添加到彼此的资源中 喜欢它 Override protected void configure HttpSecurity http throws Excep
  • 如何在insert sql语句中带参数传递列名

    如何在insert sql语句中带参数传递列名 例如 name name insert into employees id name values 1 a 这可能吗 不 您不可能需要在应用程序中或通过在 SQL Server 本身中使用动态
  • 利用浏览器缓存

    我有一个网站 当我使用 Google 插件检查页面速度时 我收到 利用浏览器缓存 以下资源缺少缓存过期时间 我可以在哪里更改此设置 Edit htaccess并附加
  • 将相对路径导入映射到 Typescript 中正确的“@types”

    在运行时 对于浏览器 我需要 import as d3 from lib d3 js 正确获取d3 我验证了这确实有效 但是包含上面的文件 调用它main js 是从打字稿文件生成的main ts目前从上面的同一行开始 打字稿编译器抱怨它找
  • Matlab中二阶常微分方程的求解系统

    介绍 我正在使用 Matlab 通过使用 ODE45 数值求解二阶常微分方程系统来模拟一些动态系统 我从 Mathworks 找到了一个关于如何执行此操作的精彩教程 最后的教程链接 在本教程中 方程组的 x 和 y 是显式的 如下所示 x
  • 无法在谷歌地图中保存多边形

    我有一个谷歌地图多边形对象 var poly new google maps Polygon paths new google maps LatLng 25 774252 80 190262 new google maps LatLng 1
  • ASP.NET 用户控件:无法使用 Eval("...") 初始化用户控件属性

    我设计了一个用户控件 它包含一个公共属性 CurrentValue 当我尝试使用 Eval 表达式初始化属性时 会分配一个空值 在下面的代码中 标签赋值 OK RatingNull 用户控件赋值为 null
  • 我可以更改 WinRT 中主磁贴的背景颜色吗?

    是否可以更改 WinRT 应用程序主图块的背景颜色 我想根据应用程序状态更改它 我使用此代码来更改图块的文本 XmlDocument contentSmall TileUpdateManager GetTemplateContent Til
  • eloquent javascript 关联表 解释

    我正在迈出编程的第一步 但我被雄辩的这个问题所困扰 特别是灰鼠问题 事情是这样的 function hasEvent event entry return entry events indexOf event 1 function tabl
  • 有什么方法可以使用 CoffeeScript 不返回某些内容吗?

    看起来 CoffeeScript 会自动返回范围中的最后一项 我可以避免这个功能吗 您必须显式返回任何内容 或者在函数底部留下一个计算结果为未定义的表达式 fun gt doSomething return Or fun gt doSome
  • Excel VBA运行时错误1004;我在代码中没有选择

    我正在尝试将一些输入复制到模型中 并将答案复制回第一张表 下面是代码 data sheet 是具有许多输入的表 Final Model 给出输出 非常简单 我正在尝试从中复制数据 将 data sheet 更改为 最终模型 然后将答案复制回
  • 节点中无浏览器 jquery 不断出现错误

    我正在尝试运行节点脚本和 html 页面 但我不断收到错误 我试图运行的脚本是 node script js page html script js 文件具有以下内容 var argv require optimist argv requi
  • 根据匹配的键:值对组合字典列表中的字典

    我想在具有匹配键 值对的字典列表中组合 合并多个字典 但是 我不希望这些对中的 值 本身成为每个新形成的字典中的列表 每个字典都有相同的一组键 但除了我想要组合的键 值对之外 大多数键 值对都是唯一的 我知道我可以根据匹配键组合字典 如下例
  • MS Access 多语言仅支持表单

    有没有办法将另一种语言应用于 Access 表单 我在创建表单时遇到问题 因为数据库值以英语存储 我必须从同一个表以不同语言生成两个相同的表单 一切都很顺利 直到我到达 性别 这样的查找字段 我的表可选值为 男性 和 女性 适用于英语形式
  • 移动设备上的 Google Analytics 垃圾邮件 - 应用程序未发布

    多个 Google Analytics 帐户似乎爆发了垃圾邮件 许多发布的事件类似于以下事件 事件类别 要使用此功能 请访问 EVENT TRACKING COM 现在对于网络 我可以添加一个过滤器来按主机名进行阻止 不完美 但可行 但移动
  • 将 pandas 系列从字符串转换为唯一的 int id [重复]

    这个问题在这里已经有答案了 我有一个系列中的分类变量 我想为每个唯一值分配整数 id 并使用 id 创建一个新系列 从而有效地将字符串变量转换为整数变量 最紧凑 最有效的方法是什么 你可以使用pandas factorize In 32 s
  • 打印堆栈跟踪

    我有一个非常短的测试文件 let print backtrace try raise Not found with Not found gt Printexc print backtrace stdout let f print backt