2017-06-15 13 views
2

我正在學習如何使用Emgu,並且VS2015遇到了問題而沒有突破它的異常,以及它沒有被try/catch塊捕獲的異常。 Visual Studio中的異常通知將閃爍一秒,然後程序退出。C#沒有捕獲代碼中的異常,或者與調試器

我的代碼:

using System; 
using Emgu.CV; 
using Emgu.CV.UI; 
using Emgu.CV.Structure; 
using Emgu.CV.Util; 
using Emgu.CV.CvEnum; 

namespace OpenCV1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       using (var image = new Image<Bgr, byte>(@"C:\Users\Administrator\Downloads\receipt-1.jpg")) 
       { 
        float scale = (float)500/(float)image.Height; 
        var resized = image.Resize(scale, Emgu.CV.CvEnum.Inter.Nearest); 
        var grey = image.Convert<Gray, byte>(); 
        grey = grey.SmoothGaussian(5, 5, 1, 1); 
        var edged = grey.Canny(25, 100); 

        //ImageViewer.Show(edged, "edged"); 

        VectorOfVectorOfPointF contours = new VectorOfVectorOfPointF(); 
        Mat hierarchy = null; 
        CvInvoke.FindContours(edged.Copy(), contours, hierarchy, RetrType.List, ChainApproxMethod.ChainApproxSimple); 
        Console.ReadLine(); 
       } 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 

我的VS2015例外設置:

enter image description here

異常的截圖(這個閃爍幾乎太快收盤前看):

enter image description here

爲什麼我不能捕捉這些異常,爲什麼視覺工作室不會破壞它們?它仍然顯示異常消息,但幾乎立即關閉。

+2

當我看到此行爲之前,它是因爲在調試器調用的非託管代碼中發生異常。嘗試保持所有「監視」或「本地」窗口關閉,以便您無法查看任何變量的內容,然後查看錯誤是否保持不變。 –

+0

@ScottChamberlain關閉他們,同樣的交易 –

回答

0

嘗試從catch塊中移除捕獲的異常類型。只要有它,如下所示:

try 
{ 
    // logic here... 
} 
catch 
{ 
    // handler 
} 

這應該抓住一切還沒有被抓獲的「異常」的具體處理程序。或者只是在現有的下面添加一個額外的catch塊,看看它是否能夠捕獲它。

+0

儘管如此,我仍然沒有抓住它,我只需要抓住它,這樣我就可以在學習時看到實際的異常情況。 –

+0

你可以在某處分享一個測試項目 - 看看發生了什麼會很有趣。 – Artak

+0

另一個想法(可能不是這種情況):默認情況下VS調試器會在執行到達處理程序之前首先處理異常。如果在第一個異常中斷處按「繼續」 - 它應該繼續執行(假設有處理程序)。 – Artak

0

我從EmguCV 2.4.2遷移我的應用程序3.2.0後,同樣的問題。鬆開頭髮後,我發現一個解決方案,爲我工作。

轉到

工具 - >選項 - >調試 - >常規

使選項使用傳統的C#和VB表達評估

enter image description here

根據VS2015文檔,這將執行以下操作:調試器將使用Visual Studio 2013 C#/ VB表達式eval而不是基於Visual Studio 2015 Roslyn的表達式評估器。

對我來說,啓用這個選項解決了這個問題。現在顯示異常對話框,並且調試過程不再被終止。