我正在通过在 Visual Studio express 中运行它来测试我的 Visual Basic .net 应用程序。
有时它运行正常,但有时我会遇到异常(如果有用,请参阅下面的详细信息)。我不确定为什么会出现异常,因为我正在测试的应用程序的特定部分重用了适用于其他功能的代码。
我应该检查什么,什么会给我关于根本原因的提示。
到目前为止我尝试过的事情是:
- 重写一些代码以使其更健壮。结果是这种方法失去了控制——我正在纠正一切。我进行了更改,例如替代库(例如用 convertTo 替换 CInt 等)。一些懒惰的声明,但我想到在我更改之前这些代码没有问题。我似乎解决的每一个变化都发现了另一个问题,另一个不同的例外
- 所以我认为我的安装肯定有根本性的问题,并且搜索发现了来自经历类似情况的人的讨论组帖子。建议的补救措施是重新安装 .net 框架。所以我这样做了,问题仍然存在。
关于解决问题根源的方法有什么想法吗?我不是在寻求解决方案,但非常欢迎一些新的想法。
更新:
我添加了以下代码以获取更多详细信息(+1 感谢@Meta-Knight)
Dim exceptionMessage As String = ex.Message
Console.WriteLine("Message: \n" & exceptionMessage)
Dim exceptionTargetSite As String = ex.TargetSite.ToString
Console.WriteLine("Inner: \n" & ex.TargetSite.ToString)
Dim exceptionSource As String = ex.Source
Console.WriteLine("Source\n:" & exceptionSource)
' put the stack trace into a variable
' (this helps debugging - put a break point after this is assigned
' to see the contents)
Dim stackTrace As String = ex.StackTrace.ToString()
Console.WriteLine("Stack trace\n:" & stackTrace)
有关异常的更多详细信息
错误 - 异常消息“算术运算导致溢出。”
异常目标站点:“Int32 ToInteger(System.String)”
异常来源:“Microsoft.VisualBasic”
在 Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value) 在 MyCo_3rd-Party-Industrial-Printing-System.Customer_EanUpc_serialNumberGeneratorAssembly.btnPrint_Click(Object sender, EventArgs e) 在 C:\labelprint\MyCo 3rd-Party-Industrial-Printing- System v2\MyCo 3rd-Party-Industrial-Printing-System\PrintForms\Customer_EanUpc_serialNumberGeneratorAssembly.vb:System.Windows.Forms.Control.OnClick(EventArgs e) 处 System.Windows.Forms.Button.OnClick(EventArgs e) 处的第 271 行在 System.Windows.Forms.Button.PerformClick() 在 System.Windows.Forms.Form.ProcessDialogKey(Keys keyData) 在 System.Windows.Forms.Control.ProcessDialogKey(Keys keyData) 在 System.Windows.Forms.Control.PreProcessMessage (消息和消息)在 System.Windows.Forms.Control.PreProcessControlMessageInternal(控制目标,消息和msg) 在 System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) 在 System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FPreTranslateMessage(MSG& msg) 在 System.Windows.Forms .Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows。 Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.RunDialog(Form form) at System.Windows.Forms.Form.ShowDialog(IWin32Window owner) at System.Windows.Forms.Form .ShowDialog() at MyCo_3rd-Party-Industrial-Printing-System.utlForm.openNewModalForm(String form) 在 C:\labelprint\MyCo 3rd-Party-Industrial-Printing-System v2\MyCo 3rd-Party-Industrial-Printing-System\实用程序\utlForm.vb:第 128 行
更新 2:
第 272 行的代码是:
For i As Integer = 1 To CInt(numQuantity)
If generationMethods() Then
第 272 行的代码现在是(我已经调整过):
Dim numQuantityAsStr As String = numQuantity.Text
Dim numQuantityAsInt As Integer = Convert.ToInt32(numQuantityAsStr)
For i As Integer = 1 To numQuantityAsInt
If generationMethods() Then
numQuantity
是我正在使用的 Windows 表单中字段的字符串变量,它有一个用户输入的值,该字段用于指定某物的数量,因此该变量被转换为整数,以便可以使用在一个 for 循环中。我使用的测试值总是在这个字段中输入 1,有时这会导致异常。
我的更改使用了我认为更现代的类型转换Convert.ToInt32
,而不是CInt
我还引入了中间步骤来帮助调试。
现在这里没有发生异常,但我确实在前一周尝试了这个,另一个单独的异常从其他地方弹出(如果我记得的话),所以我们会看看这是否能解决它。关于为什么使用不同的转换实用程序可以解决问题的任何想法?
更新 3: 现在其他地方出现异常:(但是为什么?!这是从库代码中抛出的!)
以下代码导致它:
Dim dateNowAsStr As String = DateTime.Now.Date.ToString
异常消息:“要添加的值超出范围。参数名称:值”
异常目标站点:“System.DateTime Add(Double, Int32)”
异常来源:“mscorlib”
" 在 System.TimeZoneInfo.GetDaylightTime(Int32 年,AdjustmentRule 规则) 在 System.TimeZoneInfo.GetIsDaylightSavingsFromUtc(DateTime time, Int32 年,TimeSpan utc,AdjustmentRule 规则,Boolean& isAmbiguousLocalDst) at System.TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(DateTime time, Boolean& isAmbiguousLocalDst) at System.DateTime.get_Now() at GenerationLibrary.GenerationUtilities.callserialNumberGenerator(String serialNumberGeneratorSnFile, String serialNumberGeneratorRange, DefaultSettingsHandler 设置) C:\labelprint\MyCo 3rd-Party-Industrial-Printing-System v2\GenerationLibrary\GenerationUtilities.vb:GenerationLibrary.MyCoSnGeneration 的第 28 行。C:\labelprint\MyCo 3rd-Party-Industrial-Printing-System v2\GenerationLibrary\MyCoSnGeneration.vb:第 18 行中的constructMyCoSn(DataRow& oDataRow, DefaultSettingsHandler& settings):MyCo_3rd-Party-Industrial-Printing-System.Customer_EanUpc_serialNumberGeneratorAssembly.generationMethods()在 C:\labelprint\MyCo 3rd-Party-Industrial-Printing-System v2\MyCo 3rd-Party-Industrial-Printing-System\PrintForms\Customer_EanUpc_serialNumberGeneratorAssembly.vb:MyCo_3rd-Party-Industrial-Printing-System.Customer_EanUpc_serialNumberGeneratorAssembly 的第 40 行。 btnPrint_Click(Object sender, EventArgs e) 在 C:\labelprint\MyCo 3rd-Party-Industrial-Printing-System v2\MyCo 3rd-Party-Industrial-Printing-System\PrintForms\Customer_EanUpc_serialNumberGeneratorAssembly.vb:System.Windows 的第 275 行。系统中的 Forms.Control.OnClick(EventArgs e)。Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.PerformClick() 在 System.Windows.Forms.Form.ProcessDialogKey(Keys keyData) 在 System.Windows.Forms.Control.ProcessDialogKey(Keys keyData ) 在 System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) 在 System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) 在 System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg) 在 System.Windows.Forms.Control.PreProcessMessage(Message& msg) .Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FPreTranslateMessage(MSG& msg) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 原因,Int32 pvLoopData) 在 System.Windows.Forms.Application。System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.RunDialog(Form form) 在 System.Windows.Forms 的 ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)。 Form.ShowDialog(IWin32Window owner) at System.Windows.Forms.Form.ShowDialog() at MyCo_3rd-Party-Industrial-Printing-System.utlForm.openNewModalForm(String form) in C:\labelprint\MyCo 3rd-Party-Industrial-打印系统 v2\MyCo 3rd-Party-Industrial-Printing-System\Utilities\utlForm.vb:line 128"Form.ShowDialog(IWin32Window owner) at System.Windows.Forms.Form.ShowDialog() at MyCo_3rd-Party-Industrial-Printing-System.utlForm.openNewModalForm(String form) in C:\labelprint\MyCo 3rd-Party-Industrial-打印系统 v2\MyCo 3rd-Party-Industrial-Printing-System\Utilities\utlForm.vb:line 128"Form.ShowDialog(IWin32Window owner) at System.Windows.Forms.Form.ShowDialog() at MyCo_3rd-Party-Industrial-Printing-System.utlForm.openNewModalForm(String form) in C:\labelprint\MyCo 3rd-Party-Industrial-打印系统 v2\MyCo 3rd-Party-Industrial-Printing-System\Utilities\utlForm.vb:line 128"
更新 4
但
Dim dateNowAsStr As String = CStr(DateTime.Now)
不会导致异常