Stacktrace 仅显示错误例程中的第一行并且不完整

问题描述

这有点奇怪,因为我以前从未在 C# 中见过这个。今天有用户打电话说他无法运行我们在这里谈论的程序。本例中的程序是从 VB6 到 .Net 4.6.1 的端口,并且已经完美运行了一年多。有问题的用户是我们的新同事,因此将一些初始设置添加数据库中。

他遇到的问题是在下面的例程中:

    protected void Initialiseer()
    {
        //_logCallback("Initialiseer");

        // Unieke code voor PC/process bepalen
        CPcpid = Environment.MachineName + "_" + Process.GetCurrentProcess().Id;

        LogMessage($"Unique identifier: {CPcpid}");

        // De persoonlijke gegevens ophalen
        var rst = SltlUserRepo.GetUserByPpUser(CUser);
        var user = Ep3UserRepo.GetUserByPpUser(CUser);

        // Failsafe for testing purposes only,cPrfId is 0 for 'koepelproef'
        if (CPrfId != 0 && user.PRF_ID != CPrfId)
        {
            throw new InvalidOperationException($"Default proefId komt niet overeen met parameter {user.PRF_ID} != {CPrfId}");
        }

        var mSchijf = $@"\\WURNET.NL\Homes\{Environment.UserName}\";
        CStartDir = Nz(user.STARTDIR,"").Replace(@"M:\",mSchijf).Replace(@"m:\",mSchijf);
        CUserNaam = Nz(rst.NAAM,"");
        CGewCode = Nz(rst.GEW_CODE,"");
        CTltCode = Nz(rst.TLT_CODE,"");
        CRegCode = Nz(rst.REG_CODE,"");
        CJaar = Convert.ToInt16(Nz(rst.JAAR,""));

        ...

错误的堆栈跟踪如下:

     2021-07-06 13:36:33.2309 Wur.Epros.ImportWaarnemingen.WinApp.Program.Main Error Unhandled Exception:
 Error while building type Wur.Epros.Core.Models.ImportWaarnemingenModel.  See the inner exception for details
1.) new ImportWaarnemingenModel()
2.) Wur.Epros.Core.Models.ImportWaarnemingenModel
3.) Instance of Wur.Epros.Core.Models.ImportWaarnemingenModel
4.) Container.GetInstance<Wur.Epros.Core.Models.ImportWaarnemingenModel>()

Stacktrace:
   at lambda_method(Closure,IBuildSession,IContext )
   at StructureMap.Building.Buildplan.Build(IBuildSession session,IContext context)
   at StructureMap.BuildSession.BuildNewInSession(Type pluginType,Instance instance)
   at StructureMap.Pipeline.NulloTransientCache.Get(Type pluginType,Instance instance,IBuildSession session)
   at StructureMap.BuildSession.ResolveFromLifecycle(Type pluginType,Instance instance)
   at StructureMap.SessionCache.Getobject(Type pluginType,ILifecycle lifecycle)
   at StructureMap.SessionCache.GetDefault(Type pluginType,IPipelineGraph pipelineGraph)
   at StructureMap.Container.GetInstance[T]()
   at Wur.Epros.ImportWaarnemingen.WinApp.FrmImportWaarnemingen..ctor() in E:\Jenkins\workspace\EPROS Nightly (.Net)\Wur.Epros\Wur.Epros.ImportWaarnemingen.WinApp\FrmImportWaarnemingen.cs:line 25
   at Wur.Epros.ImportWaarnemingen.WinApp.Program.Main() in E:\Jenkins\workspace\EPROS Nightly (.Net)\Wur.Epros\Wur.Epros.ImportWaarnemingen.WinApp\Program.cs:line 34

Inner Exception
Input string was not in a correct format.
Stacktrace:
   at System.Number.StringToNumber(String str,NumberStyles options,NumberBuffer& number,NumberFormatInfo info,Boolean parseDecimal)
   at System.Number.ParseInt32(String s,NumberStyles style,NumberFormatInfo info)
   at system.int16.Parse(String s,NumberFormatInfo info)
   at System.Convert.ToInt16(String value)
   at Wur.Epros.Core.Workers.WorkerBase.Initialiseer() in E:\Jenkins\workspace\EPROS Nightly (.Net)\Wur.Epros\Wur.Epros.Core\Workers\WorkerBase.cs:line 178
   at Wur.Epros.Core.Models.ImportWaarnemingenModel..ctor() in E:\Jenkins\workspace\EPROS Nightly (.Net)\Wur.Epros\Wur.Epros.Core\Models\ImportWaarnemingenModel.cs:line 45
   at lambda_method(Closure,IContext )

重点是

在第 178 行的代码中:

  CPcpid = Environment.MachineName + "_" + Process.GetCurrentProcess().Id;

在堆栈跟踪中:

   at Wur.Epros.Core.Workers.WorkerBase.Initialiseer() 
      in E:\Jenkins\workspace\EPROS Nightly (.Net)\Wur.Epros\Wur.Epros.Core\Workers\WorkerBase.cs:line 178

从我们看到这一点的第一刻起,我们就不相信所提供的信息。永远不可能是那条线。经过一些调试和生产运行(耗时)后,我们发现下面这行是问题所在:

   CJaar = Convert.ToInt16(Nz(rst.JAAR,""));

与 VB6 Nz 例程等效的例程 'Nz' 在 'obj' == null 时返回 'vervanging',情况正是如此。在数据库中,列 JAAR 的值为 NULL。当然空字符串不能解析为int。

    public string Nz(object obj,string vervanging)
    {
        if (obj == null)
        {
            return vervanging;
        }

        return obj.ToString();
    }

我希望在堆栈跟踪中看到的不是第 178 行,而是第 198 行,这是错误代码的行。它让我们离开了一段时间。谁能解释为什么堆栈跟踪看起来像它的样子?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)