Я тестирую приложение Visual Basic .net, запустив его в Visual Studio express.Что я должен учитывать, когда получаю прерывистое исключение в Visual Basic .net (отладка в Visual Studio Express 2010)?
Иногда он работает нормально, но иногда я получаю исключение (подробности ниже, если это полезно). Я не уверен, почему я получаю исключение, поскольку конкретная часть приложения, которое я тестирую, повторно использует код, который работает нормально для других функций.
Что я должен проверить, что бы подсказывало мне первопричину.
Вещи, которые я пытался до сих пор являются:
- Переписывая часть кода, чтобы быть более надежными. Результатом этого было то, что этот подход вышел из-под контроля - я все исправлял. Я внес изменения, такие как альтернативные библиотеки (например, замена CInt на convertTo и т. Д.). Некоторые ленивые объявления, но мне пришло в голову, что с этими изменениями не было проблем с кодом перед моими изменениями. И каждое изменение, которое я, казалось, решал, обнаружил еще одну проблему, другое другое исключение.
- Так что я думал, что что-то должно быть в корне неверно с моей установкой, и поиск найденных сообщений в группах обсуждения у людей, испытывающих нечто похожее. Предложенным средством было бы переустановить инфраструктуру .net. Поэтому я сделал это, и проблемы все еще возникали.
Любые мысли о подходе, чтобы добраться до корня проблемы? Я не прошу разрешения, но некоторые свежие идеи были бы очень желанными.
Update:
Я добавил следующий код, чтобы получить более подробную информацию (+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 (отправитель объекта, EventArgs e) в C: \ labelprint \ MyCo 3rd-Party-Industrial-Printing-System v2 \ MyCo 3rd-Party-Industrial-Printing-System \ PrintForms \ Customer_EanUpc_serialNumberGeneratorAssembly.vb: строка 271 в System.Windows.Forms.Cont rol.OnClick (EventArgs e) в System.Windows.Forms.Button.OnClick (EventArgs e) в System.Windows.Forms.Button.PerformClick() в System.Windows.Forms.Form.ProcessDialogKey (Keys keyData) в системе. Windows.Forms.Control.ProcessDialogKey (Keys keyData) в System.Windows.Forms.Control.PreProcessMessage (Message & msg) в System.Windows.Forms.Control.PreProcessControlMessageInternal (контрольная цель, сообщение & сообщений) в System.Windows.Forms .Application.ThreadContext.PreTranslateMessage (MSG & msg) в System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FPreTranslateMessage (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, контекст ApplicationContext) в System.Windows.Forms.Application .ThreadContext.RunMessageLoop (причина Int32, контекст ApplicationContext) в System.Windows.Forms.Application.RunDialog (форма формы) в System.Windows.Forms.Form.ShowDialog (владелец IWin32Window) в System.Windows.Forms.Form.ShowDialog () в 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 \ Utilities \ 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
Я также представил промежуточные шаги, чтобы помочь отлаживать.
Исключение сейчас здесь не происходит, но я пробовал это на другой неделе, и другое другое исключение появилось (если я помню) откуда-то еще, чтобы мы это выяснили. Любые мысли о том, почему использование другой утилиты преобразования могут решить проблему?
Update 3: Исключение сейчас происходит в другом месте: (! Но почему ?! Это один выбрасывается из библиотеки кода)
Следующий код вызвал его:
Dim dateNowAsStr As String = DateTime.Now.Date.ToString
Исключение сообщений : "Значение для добавления за пределами допустимого диапазона. Имя параметра: значение"
Исходный целевой сайт: "System.D. ateTime Add (Double, Int32) "
источникИсключение: "mscorlib"
" в System.DateTime.Add (двойное значение, Int32 шкала) в System.TimeZoneInfo.TransitionTimeToDateTime (Int32 год, TransitionTime transitionTime) в System.TimeZoneInfo.GetDaylightTime (Int32 год, правила AdjustmentRule) в System.TimeZoneInfo.GetIsDaylightSavingsFromUtc (DateTime время, Int32 год, TimeSpan МСВ, правила AdjustmentRule, Boolean & isAmbiguousLocalDst) в System.TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc (DateTime время, Boolean & isAmbiguousLocalDst) в System.DateTime.get_Now() в GenerationLibrary.GenerationUtilities.callserialNumberGenerator (String serialNumberGeneratorSnFile, String s erialNumberGeneratorRange, DefaultSettingsHandler) в C: \ labelprint \ MyCo 3rd-Party-Industrial-Printing-System v2 \ GenerationLibrary \ GenerationUtilities.vb: строка 28 в GenerationLibrary.MyCoSnGeneration.constructMyCoSn (DataRow & oDataRow, DefaultSettingsHandler &) в C: \ labelprint \ MyCo 3rd-Party-Industrial-Printing-System v2 \ GenerationLibrary \ MyCoSnGeneration.vb: строка 18 в 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: строка 40 в MyCo_3rd-Party-Industrial-Printing-System. Customer_EanUpc_serialNumberGeneratorAssembly.btnPrint_Click (отправитель объекта, EventArgs e) в C: \ labelprint \ MyCo 3rd-Party-Industrial-Printing-System v2 \ MyCo 3rd-Party-Industrial-Printing-System \ PrintForms \ Customer_EanUpc_serialNumberGeneratorAssembly.vb: строка 275 в системе. Windows.Forms.Control.OnClick (EventArgs e) в System.Windows.Forms.Button.OnClick (EventArgs e) в System.Windows.Forms.Button.PerformClick() в System.Wi ndows.Forms.Form.ProcessDialogKey (Keys keyData) в System.Windows.Forms.Control.ProcessDialogKey (Keys keyData) в System.Windows.Forms.Control.PreProcessMessage (сообщение & сообщений) в System.Windows.Forms.Control.PreProcessControlMessageInternal (цель управления, сообщение & тзда) в System.Windows.Forms.Application.ThreadContext.PreTranslateMessage (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, Контекст ApplicationContext) в System.Windows.Forms.Application.ThreadContext.RunMessageLoop (причина Int32, A pplicationContext) в System.Windows.Forms.Application.RunDialog (форма формы) в System.Windows.Forms.Form.ShowDialog (владелец IWin32Window) в System.Windows.Forms.Form.ShowDialog() в MyCo_3rd-Party-Industrial- Print-System.utlForm.openNewModalForm (String form) в C: \ labelprint \ MyCo 3rd-Party-Industrial-Printing-System v2 \ MyCo 3rd-Party-Industrial-Printing-System \ Utilities \ utlForm.vb: строка 128 "
Update 4
НО
Dim dateNowAsStr As String = CStr(DateTime.Now)
не вызывает исключение
Вы показали трассировку стека, но не фактическую ошибку ... –
+1 @ Meta-Knight спасибо за совет - обновлено сейчас. – therobyouknow
[У вас есть опция Strict On?] (Http://www.getdotnetcode.com/gdncstore/free/Articles/OPTION%20STRICT%20ON.htm) Если нет, вам нужно получить это в своей жизни. –