我維護用VB6編寫的舊應用程序。在客戶端環境中,它引發了運行時錯誤,我無法在調試器下重現這些錯誤。有沒有辦法獲得堆棧跟蹤或錯誤的位置?運行時錯誤堆棧跟蹤或VB6中的位置
我的意思是,不要在整個代碼中添加跟蹤語句,如here或添加錯誤處理程序以記錄到每個過程,如here。
這似乎是一個簡單的問題。 對不起。 我只是不太瞭解VB6。 考慮到它使用的廣泛程度(或曾經使用過的程度),出乎意料地很難將任何信息穀歌出來。
我維護用VB6編寫的舊應用程序。在客戶端環境中,它引發了運行時錯誤,我無法在調試器下重現這些錯誤。有沒有辦法獲得堆棧跟蹤或錯誤的位置?運行時錯誤堆棧跟蹤或VB6中的位置
我的意思是,不要在整個代碼中添加跟蹤語句,如here或添加錯誤處理程序以記錄到每個過程,如here。
這似乎是一個簡單的問題。 對不起。 我只是不太瞭解VB6。 考慮到它使用的廣泛程度(或曾經使用過的程度),出乎意料地很難將任何信息穀歌出來。
嘗試編譯爲pcode,看看你是否仍然有錯誤。這是VB6的調試模式和運行時間之間的一個常見區別。我曾經編譯爲本機並且遇到僅在運行時發生的錯誤。當我切換到pcode時,發現錯誤消失了,或者更可能出現新的錯誤,這些錯誤反映了真正的問題,並且在調試模式下更容易再現。
如果儘管你仍然得到錯誤,那麼我真的建議你從你的程序堆棧的頂部和使用的
On Error Goto Handler
<code>
Exit <routine>
Handler:
Err.Raise Err.Number, "(function_name)->" & Err.source, Err.Description
Maero的建議這是一個痛苦的工作,你一路下滑,但有沒有真正的方法周圍。
這已經有一段時間了,但我不認爲有一種方法可以在VB6應用程序中獲取堆棧跟蹤,而無需添加錯誤處理程序並輸出相應的消息。有一些第三方工具會將錯誤處理添加到整個應用程序,但我相信它只是在整個代碼中添加了「On Error Goto」錯誤處理程序。
就像在旁邊一樣,我在VB6應用程序中遇到的一個更隱祕的運行時錯誤是當我使用客戶端PC上不存在的控件屬性中的字體時。這產生了一個不能被代碼困住的運行時錯誤,所以我添加的錯誤處理量都沒有發現錯誤。我偶然碰到了它。希望這可以幫助。
如果在「項目屬性/編譯」選項卡上選中「創建符號調試信息」複選框,則可以像使用本機C++應用程序一樣在Visual Studio中進行調試。
VB6調試器有時是片狀的。有替代品。
我問過同樣的問題http://stackoverflow.com/questions/127645/is-it-possible-to-retrieve-the-call-stack-programmatically-in-vb6我相信它可以不行。 – raven 2009-07-08 18:35:34
也許我不清楚。我有一個在遠程位置生產的應用程序。我沒有訪問這個系統,我不能在那裏運行調試器。他們的環境中有些東西會觸發運行時錯誤。我不能指望他們的IT人員(更不用說常規用戶)真正地幫助,除了向我發送任何顯示或轉儲的日誌文件之外。我需要一些工具,儀器或任何東西,這將幫助我從他們那裏獲得有意義的輸入。是 - 如烏鴉寫道 - 在每個例程中寫一個「On Error GoTo/Reraise/LogError」是唯一的方法? – 2009-07-09 15:28:33
那麼,你可以用我提到的調試符號進行編譯,然後讓它們在發生錯誤時執行內存轉儲。然後您將能夠加載內存轉儲,並希望使用Visual Studio獲取堆棧跟蹤。 – Ant 2009-07-10 08:57:21