Vb.net 抓住 "Assertion Failed"?
Vb.net Catch an "Assertion Failed"?
所以我正在处理的程序有一个 "Process File" 按钮,它会打开一个 select 文件对话框,你 select 一个文本文件。然后,该软件调用一个函数,将其通过管道传输到 C 语言的 DLL 库中,并得到 returns 结果。
一切正常,除非您尝试处理的文件被移动或删除。 VB 抛出一个很大的 "Assertion Failed" 消息框说 str =! NULL(我猜是真的)。我在 "try, Catch" 语句中有函数。
为什么它不直接抓住它?
我知道我可以在处理文件之前验证文件是否存在,但删除文件是一个测试,以查看 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
您是否阅读了 Debug.Assert
方法的文档?它在做什么是重点。它应该在调试期间提供有关特定条件的特定信息。关键在于,在执行会受断言测试条件影响的操作之前,先放置断言。在调试时,您会从断言中获取消息,而在发布版本中,您只会从随后的代码中抛出异常。你看到的就是你应该看到的。如果您想避免断言,那么 运行 发布版本。
所以我正在处理的程序有一个 "Process File" 按钮,它会打开一个 select 文件对话框,你 select 一个文本文件。然后,该软件调用一个函数,将其通过管道传输到 C 语言的 DLL 库中,并得到 returns 结果。
一切正常,除非您尝试处理的文件被移动或删除。 VB 抛出一个很大的 "Assertion Failed" 消息框说 str =! NULL(我猜是真的)。我在 "try, Catch" 语句中有函数。
为什么它不直接抓住它?
我知道我可以在处理文件之前验证文件是否存在,但删除文件是一个测试,以查看 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
您是否阅读了 Debug.Assert
方法的文档?它在做什么是重点。它应该在调试期间提供有关特定条件的特定信息。关键在于,在执行会受断言测试条件影响的操作之前,先放置断言。在调试时,您会从断言中获取消息,而在发布版本中,您只会从随后的代码中抛出异常。你看到的就是你应该看到的。如果您想避免断言,那么 运行 发布版本。