You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在try-with表达式的with分支内设置断点?

解决F#调试器无法在异常处理块暂停的问题

嘿,这个问题我之前折腾过好一会儿,咱们来一步步搞清楚问题出在哪,以及怎么解决:

核心原因

默认情况下,调试器只会在未被捕获的异常抛出时自动暂停。你的代码里异常被with块成功捕获了,所以调试器不会主动停在printfn "WTF"这一行——它觉得“异常已经被处理了,没必要打断你”。

针对Visual Studio的解决办法

方法1:手动打断点(最直接)

直接点击printfn "WTF"行号旁边的空白区域,出现红色圆点(断点标记)。之后启动调试(F5),程序执行到这一行时就会自动暂停,完全符合你的需求。

方法2:调整调试器异常设置(按需选择)

如果你想在异常抛出时就暂停,或者确保捕获后的处理逻辑能被调试到,可以这么做:

  • 按下Ctrl+Alt+E打开「异常设置」窗口
  • 找到「Common Language Runtime Exceptions」→ 展开后定位到System.InvalidOperationException
    • 勾选「Thrown」:异常一被抛出就暂停(不管有没有被捕获)
    • 勾选「User-unhandled」:只有当异常没被你的代码捕获时才暂停
  • 另外,如果打了断点还是没反应,去「工具→选项→调试→常规」里取消勾选「启用仅我的代码」——这个设置有时候会让调试器跳过你自己写的处理块逻辑。

针对LinqPad的解决办法

LinqPad的调试逻辑和VS类似,但要注意两个关键点:

  1. 必须点击Debug按钮(不是普通的Run按钮)启动调试模式
  2. 和VS一样,手动在printfn "WTF"行左侧打断点(点击空白处出现红点),调试运行时就会在该行暂停。

额外检查

确认你的代码确实会执行到处理块:比如有没有可能try块里的raise语句没被执行到?不过你的代码是直接try raise (...) with ...,所以肯定会进入with块,这一步应该没问题。

内容的提问来源于stack exchange,提问作者Pavel Voronin

火山引擎 最新活动