DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■34328 / inTopicNo.1)  Catch時のex.StackTraceの情報
  
□投稿者/ たくろう 一般人(1回)-(2019/10/26(Sat) 10:43:50)
  • アイコン環境/言語:[VB2017] 
    分類:[.NET] 

    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が必要となります。
    

マルチポストを報告
違反を報告
引用返信 削除キー/
■34330 / inTopicNo.2)  Re[1]: Catch時のex.StackTraceの情報
□投稿者/ 魔界の仮面弁士 大御所(1242回)-(2019/10/26(Sat) 17:27:32)
  • アイコンNo34328に返信(たくろうさんの記事)
    > 「24行目でエラー」という情報が含まれるようにしたいのですが、
    > どのようにすれば良いでしょうか?

    26 行目を
     Throw
    から
     System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(ex).Throw()
    に変更してみてください。

    https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.exceptionservices.exceptiondispatchinfo?WT.mc_id=DT-MVP-8907&view=netframework-4.5
違反を報告
引用返信 削除キー/
■34331 / inTopicNo.3)  Re[2]: Catch時のex.StackTraceの情報
□投稿者/ たくろう 一般人(2回)-(2019/10/26(Sat) 22:34:25)
  • アイコンNo34330に返信(魔界の仮面弁士さんの記事)
    > 26 行目を
    >  Throw
    > から
    >  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(ex).Throw()
    > に変更してみてください。

    ありがとうございます。
    週明け、会社で確認してみます。

    #解決マークはその時に。

違反を報告
引用返信 削除キー/
■34343 / inTopicNo.4)  Re[2]: Catch時のex.StackTraceの情報
□投稿者/ たくろう 一般人(3回)-(2019/10/28(Mon) 23:03:28)
  • アイコンNo34330に返信(魔界の仮面弁士さんの記事)
    >  System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture(ex).Throw()

    会社で試したところ、できました。

    「24行目でエラー」と「26行目でエラー」と「14行目でエラー」の
    3つの情報が含まれるようになりました。
    (3つの情報以外に、エラーとは直接関係ない(?)情報が含まれるようになってしまっていましたけども、問題ありません。)

    ありがとうございました。

解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -