Vb.net赶上“断言失败”?

时间:2016-04-01 19:18:11

标签: vb.net try-catch assertion

所以我正在处理的程序有一个“Process File”按钮,它打开一个选择文件对话框,你选择一个文本文件。然后,该软件调用一个函数,将其管理到C中的DLL库并返回结果。

除非您尝试处理文件被移动或删除,否则一切正常。 VB抛出一个很大的“Assertion Failed”消息框,说str =! NULL(我猜是真的)。我在“try,Catch”语句中有这个功能。

Assertion

为什么不抓住它?

我知道我可以在处理文件之前验证该文件是否存在,但是删除该文件是一个测试,看看try,catch是否有效,而不是由于大的断言框。

=============================================== ===========================

        Try
            ProcessSongResult = ProcessSongInC(old_key(0),
                              new_key(0),
                              output_mode(0),
                              lyrics_mode(0),
                              display_format(0),
                              blank_line_mode(0),
                              song_file_path(0),
                              screen_width,
                              screen_height,
                              paper_width,
                              paper_height,
                              error_msg(0),
                              transposed_song(0),
                              num_columns,
                              column_1_end,
                              column_2_end,
                              font_size,
                              total_lines,
                              tsi(0),
                              ischord(0))

        Catch ex As Exception
            MsgBox("Tranposing error encountered. Choose different settings and try again.", MsgBoxStyle.Critical, "Transposing Error Encountered!")
            Exit Sub

        End Try

Public Declare Function ProcessSongInC Lib "LMSdll.dll" (
    ByRef old_key As Byte,
    ByRef new_key As Byte,
    ByRef output_mode As Byte,
    ByRef lyrics_mode As Byte,
    ByRef display_format As Byte,
    ByRef blank_lines_mode As Byte,
    ByRef song_file_path As Byte,
    ByVal screen_width As Integer,
    ByVal screen_height As Integer,
    ByVal paper_width As Integer,
    ByVal paper_height As Integer,
    ByRef err_msg As Byte,
    ByRef TransposedSong As Byte,
    ByRef num_columns As Integer,
    ByRef column_1_end As Integer,
    ByRef column_2_end As Integer,
    ByRef font_size As Integer,
    ByRef total_lines As Integer,
    ByRef tsi As Integer,
    ByRef ischord As Byte
    ) As Integer

1 个答案:

答案 0 :(得分:0)

您是否阅读过Debug.Assert方法的文档?它正在做的是重点。它应该在调试期间提供有关特定条件的特定信息。重点是你在做一些会受到断言测试条件影响的事情之前放置一个断言。在调试时,您会从发布构建中获得断言的消息,您只会从后面的代码中抛出异常。你所看到的就是你应该看到的东西。如果你想避免断言,那么运行Release版本。