2019/10/26(Sat) 10:47:40 編集(投稿者)
2019/10/26(Sat) 10:44:43 編集(投稿者)
2019/10/26(Sat) 10:44:34 編集(投稿者)
--------------------------------
01 Public Class Form1
02 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
03 Try
04 Dim l1 As Long = 1
05 Dim l2 As Long = 0
06 Dim l3 As Long
07 l3 = l1 / l2 'ゼロ除算エラーを発生
08 Catch ex As Exception
09 Console.WriteLine(ex.StackTrace)
10 End Try
11 End Sub
12 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
13 Try
14 Test2()
15 Catch ex As Exception
16 Console.WriteLine(ex.StackTrace)
17 End Try
18 End Sub
19 Private Sub Test2()
20 Try
21 Dim l1 As Long = 1
22 Dim l2 As Long = 0
23 Dim l3 As Long
24 l3 = l1 / l2 'ゼロ除算エラーを発生
25 Catch ex As Exception
26 Throw
27 End Try
28 End Sub
29 End Class
--------------------------------
例として、このようなプログラムがあります。
#実際には会社でプログラムを書いてて、それを紙に印刷して持ち帰り
#家で紙から再度手打ちしてプログラムを書いているので、
#もしかすると、誤字脱字があるかもしれません。
#社内ルールで会社から掲示板に投稿できない為、ご容赦ください。
フォーム上にButton1とButton2の2つ配置されています。
両ボタンとも処理内容は同じです。
ただ、その処理をボタンのイベントプロシージャに直接書いているか
サブプロシージャに書いているかの違いです。
Button1を実行すると、エラーが発生して、
ex.StackTrace(の出力結果)には
「7行目でエラー」という情報があり、問題ありません。
Button2を実行すると、エラーが発生して、
ex.StackTrace(の出力結果)には
「26行目でエラー」と「14行目でエラー」の2つの情報だけで、
最初のエラー位置「24行目でエラー」という情報が含まれません。
「24行目でエラー」という情報が含まれるようにしたいのですが、
どのようにすれば良いでしょうか?
※サブプロシージャではTry-Catchしなければ良いのかもしれませんが、
この例ではそうですが、実際には、データベースのトランザクションなどを行っており、
サブプロシージャ内でもTry-Catchが必要となります。