c# - 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, Instance instance, 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, NumberStyles style, 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 , IBuildSession , 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, ""));
当 'obj' == null 时,与 VB6 Nz 例程等效的例程 'Nz' 返回 'vervanging',情况正是如此。在数据库中,列 JAAR 的值为 NULL。当然空字符串不能解析为int。
public string Nz(object obj, string vervanging)
{
if (obj == null)
{
return vervanging;
}
return obj.ToString();
}
我希望在堆栈跟踪中看到的不是第 178 行,而是第 198 行,这是错误代码的行。它让我们失望了一段时间。谁能解释为什么堆栈跟踪看起来像它的样子?
解决方案
推荐阅读
- node.js - 如何在 mongodb 的 node.js 实现中执行不区分大小写的查询?
- java - 如何将一段充满双引号的文本分配给Java中的String变量
- javafx - 如何允许用户单击“通过”javafx 阶段以获得“覆盖”样式应用程序?
- sql - 将另一个表中的数据作为外键插入
- django - 我正在 django 中创建一个 post 方法并在 vie 中编写了一个 def,但它没有在 consele 中打印。我认为 prog 无法进入 IF 状态
- go - 未能扩展 fyne 的小部件
- java - 在构造函数中调用方法是一种好习惯吗?
- java - 如何为两个或更多用户共享一个页面?
- javascript - 如何等待 DOM 更改呈现?(MutationObserver 不起作用)
- mysql - 将准备好的 mysql 查询转换为简单的选择查询