使用Sentry在C#中记录未处理的异常

问题描述 投票:0回答:2

我正在编写.NET应用程序,该应用程序是Autodesk Revit程序的“外接程序”。我想使用Sentry来记录和查看一般未处理的异常。 From my understanding,以下代码应捕获异常并将其发送到我的sendry.io帐户的仪表板。

using (SentrySdk.Init("<my sentry dsn string>"))
{
    throw new DuplicateWaitObjectException();
}

但是,我的仪表板上没有显示DuplicateWaitObjectException。我不知道为什么上面的代码无法正常工作,尤其是因为捕获错误明确可以正常工作:

SentrySdk.Init("<my sentry dsn string>");

try
{
    throw new DuplicateWaitObjectException();
}
catch (Exception err)
{
    SentrySdk.CaptureException(err);
}

我怀疑这可能与我的应用程序是由Revit程序加载的加载项有关,而不是作为独立的应用程序,但我真的不确定。我相信我的代码(第一个代码块)应该可以工作吗?

[我正在考虑减轻此问题,而不是将我的代码包装在Revit入口点的try-catch块中,但这对我来说似乎很棘手,因为我不知道是什么导致了此问题。

我正在使用Windows(10)的Visual Studio 2019,并为Revit 2019进行开发。我的SentrySDK版本为v2.1.1。

感谢阅读

c# exception .net-core sentry revit-api
2个回答
2
投票

Revit捕获任何未处理的异常,因此库将无法看到它们。

到目前为止,将代码包装在try-catch块中的想法是最简单的解决方案。唯一的其他选择是在单独的AppDomain或进程中运行代码,并使用远程处理或gRPC之类的东西与Revit API进行通信。


0
投票

我认为以上提供的代码是最佳解决方案。提供了相同的想法https://stackoverflow.com/a/54698824/6247420

[Transaction(TransactionMode.ReadOnly)]
    public class MyCommand: IExternalCommand 
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementS

    et elements) {

    SentrySdk.Init("<my sentry dsn string>");
            try 
            {
                //do stuff
            } catch (Exception exp) {
               SentrySdk.CaptureException(exp);
            }
        } 
© www.soinside.com 2019 - 2024. All rights reserved.