运行时遇到了致命错误

时间:2013-10-24 12:07:02

标签: vb.net

  

运行时遇到了致命错误。错误的地址   线程0x1f70上的0x6a0a7c6d。错误代码是0x80131623。这可能是   CLR中的错误或用户的不安全或不可验证部分   码。通常由编组用户错误形成的此错误的来源   COM-interop或PInvoke,可能会损坏堆栈。

有谁知道如何追踪这个问题及其实际意义?!

发生这种情况的代码如下:

        Public Sub Ok()

            Try
                BTWTariefID = 0
                If Prijs > 0 Then
                    Dim formVraagBtw As New wndVraagBTW()
                    formVraagBtw.ShowDialog()
                    BTWTariefID = formVraagBtw.BTWID
                End If

                CreateOpmerking(Nothing, False, BTWTariefID)

            Catch ex As Exception
                WriteErrorLog("btnOk", New StackTrace().GetFrame(0).GetMethod.ToString(), ex)
            End Try

        End Sub

奇怪的是,如果我在这个子区域内设置一个断点,然后点击f5我不会得到任何错误,只有当我在这个子上没有任何断点时我才会得到错误。

有什么想法吗?

编辑:

Private Sub CreateOpmerking(gRegel As clsVerkooporderRegel, showBTWTarief As Boolean, btwTariefID As Integer)

            Try
                Dim dblPrijs As Double
                If DMStr(Prijs).Trim = "" Then Prijs = "0"
                If Opmerking.Length > 0 And Double.TryParse(Prijs, dblPrijs) Then

                Else
                    dblPrijs = 0
                End If

                If OrderRegel Is Nothing Then
                    If gRegel Is Nothing Then
                        Parent.VMVerkoop.opmerkingsregel(Opmerking, dblPrijs, Aantal, Item, Gang, showBTWTarief, btwTariefID)
                    Else
                        Parent.VMVerkoop.opmerkingsregel(Opmerking, dblPrijs, gRegel.aantal, gRegel.orderregel.item, gRegel.orderregel.Gang, showBTWTarief, btwTariefID)
                    End If
                    Me.Parent.ModalVisibility = Visibility.Hidden
                    Me.Parent.Modal = Nothing
                Else
                    OrderRegel.orderregel.opmerking = Opmerking
                    OrderRegel.orderregel.Omschrijving2 = Opmerking
                    OrderRegel.orderregel.prijs_per_stuk = dblPrijs
                    OrderRegel.orderregel.prijs_per_stuk_origineel = dblPrijs
                    OrderRegel.orderregel.btwtariefID = btwTariefID
                    OrderRegel.orderregel.aantal = Aantal
                    If Artikel IsNot Nothing Then OrderRegel.orderregel.artikelID = Artikel.ID
                    OrderRegel.regeltotaalnakorting = Aantal * dblPrijs
                    'Me.Parent.VMVerkoop.opmerkingsregel(Opmerking, dblPrijs, Aantal, Item, Gang, Artikel)
                    Me.Parent.ModalVisibility = Visibility.Hidden
                    Me.Parent.Modal = Nothing
                    Me.Parent.VMVerkoop.ververs_orderregels()
                    Opmerking = ""
                End If
            Catch ex As Exception
                WriteErrorLog("CreateOpmerking", New StackTrace().GetFrame(0).GetMethod.ToString(), ex)
            End Try
        End Sub

当if条件为真时发生错误,但是如果我在if条件之外设置断点,代码将运行没有问题,如果我取出断点,则根本没有错误。 感谢

1 个答案:

答案 0 :(得分:1)

  

错误代码为0x80131623

那是COR_E_FAILFAST,一个非常令人讨厌的CLR崩溃。通常在发现堆栈被缓冲区溢出损坏时触发,程序立即以“快速失败”进程退出终止。这是恶意软件的对策,堆栈缓冲区溢出是感染程序的传统方式。

这些崩溃在.NET 4.0的早期并不完全不常见,第一个版本的CLR内置了“缓冲区安全检查”选项,C ++编译器的/ GS选项。已经有一段时间了,因为我看到有人报告它,但是它们已经修复,目前的CLR版本不再受到误报的影响。

难以提供适当的建议,非常不太可能与您的代码有任何关系。您确实希望确保.NET和VS版本是最新的。请务必启用Windows Update,以便更新.NET版本,确保您拥有最新的VS Service Pack。如果你可以很好地重现崩溃,那么你将有机会获得微软支持的帮助。

以防万一:故意可以由您自己的代码触发。通常在AppDomain.UnhandledException事件的事件处理程序中完成,Environment.FailFast()是立即终止程序的常用方法。