none
請問debug的問題 RRS feed

  • 問題

  • 請問各位,

        我有用serial port的元件寫了一個VB.NET的程式, 每分鐘發送command到RS-485, 然後將得到的資料寫入txt檔,

        但有時候程式執行到一半時, 會出現 這個程式錯誤, 是否xxx (就一般windows的錯誤訊息)

        這時候程式還會繼續跑, 也會發送command, 但就收不到任何訊息了

        我的程式有用try catch去捕捉錯誤, 但沒有任何訊息, 請問我要如何debug?

    Tks.

    • 已移動 璉璉Moderator 2010年8月21日 上午 03:05 (從:Visual Studio一般討論區(General))
    2010年8月18日 上午 03:12

解答

  • 要判斷是不是檔案鎖定造成這個問題, 你先寫一個程式把那文字檔獨占開啟, 然後啟動你的程式, 監測看是不是第一次進入此程式碼就掛了, 而且是相同的訊息.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 taxchen 2010年8月18日 上午 07:22
    2010年8月18日 上午 04:55
    版主

所有回覆

  • 參考一下這一篇

    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/11dcc1ef-f62c-4d1c-b641-ff78a6e144d0


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年8月18日 上午 03:25
    版主
  • 我去看事件檢視器, 發現有錯誤, 有二個

    這支程式是會將資料轉換後寫入txt, 還有另一支程式也是會定期將txt檔裡面的資料讀取後寫入資料庫

    是否有可能是這二支程式同時開啟txt, 造成IO exception?

    如果是, 我要如何在VB .NET裡判斷檔案是否有被開啟, 或是鎖定後再開啟txt ?

    錯誤訊息:

    來源: .NET Runtime 4.0 Error Reporting

    EventType clr20r3, P1 inverter.exe, P2 1.0.0.0, P3 4c69fd52, P4 mscorlib, P5 4.0.0.0, P6 4ba1da6f, P7 3dab, P8 1f4, P9 system.io.ioexception, P10 NIL.

    在約十分鐘後出現, 程式在這個時候當掉

    來源: .NET Runtime

    {: Inverter.exe
    Framework : v4.0.30319
    yz: BzwA]Bz~pC
    ~pT: System.IO.IOException
    |:
        System.Windows.Forms.Control.MarshaledInvoke(System.Windows.Forms.Control, System.Delegate, System.Object[], Boolean)
        System.Windows.Forms.Control.Invoke(System.Delegate, System.Object[])
        Inverter.frmMain.sp_DataReceived(System.Object, System.IO.Ports.SerialDataReceivedEventArgs)
        System.IO.Ports.SerialPort.CatchReceivedEvents(System.Object, System.IO.Ports.SerialDataReceivedEventArgs)
        System.IO.Ports.SerialStream+EventLoopRunner.CallReceiveEvents(System.Object)
        System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object)
        System.Threading.ExecutionContext.runTryCode(System.Object)
        System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode, CleanupCode, System.Object)
        System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
        System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
        System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
        System.Threading.ThreadPoolWorkQueue.Dispatch()
        System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

    • 已提議為解答 Neo.Bug.Net 2017年9月3日 上午 09:46
    2010年8月18日 上午 03:42
  • 換一個方式會比較好, 因為使用文字檔容易有鎖定的問題, 你應該先寫入資料庫再轉成文字檔.

    你的這個問題可能要看一下 frmMain.sp_DataReceived 及其相關程式碼.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年8月18日 上午 04:13
    版主
  • 因為轉成文字檔是要給別人用, 所以要先轉成文字檔.

    下面是寫入txt的程式碼, 不知是否OK?

                Dim fiSepi As FileInfo

                fiSepi = New FileInfo(lbExtFile.Text)

                If Not fiSepi.Exists Then
                    Dim sw As StreamWriter = fiSepi.CreateText

                    sw.Write(sData & vbCrLf)
                    sw.Flush()
                    sw.Close()
                Else
                    Dim sw As StreamWriter = fiSepi.AppendText
                    sw.Write(sData & vbCrLf)
                    sw.Flush()
                    sw.Close()
                End If

    2010年8月18日 上午 04:40
  • 要判斷是不是檔案鎖定造成這個問題, 你先寫一個程式把那文字檔獨占開啟, 然後啟動你的程式, 監測看是不是第一次進入此程式碼就掛了, 而且是相同的訊息.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 taxchen 2010年8月18日 上午 07:22
    2010年8月18日 上午 04:55
    版主
  • 是, 沒錯, 是這個問題, 我目前用try catch避掉了, 如果發生會少一筆資料寫入txt, 但下一分鐘會正常.

    至少程式不會當.

    2010年8月18日 上午 07:22
  • 移文至:Visual Basic
    T.L. Cheng
    2010年8月21日 上午 03:04
    版主