/ / C # zastaviť na chybovom riadku v rámci pokusu catch [duplicate] - c #, try-catch, breakpoints

C # stop na čiaru chyby v rámci pokusu catch [duplicate] - c #, try-catch, breakpoints

Ak spustím kód, ktorý volá Test1 (),VS2012 sa pekne rozbije na tejto linke a ukáže mi presne, čo sa deje. Ak poznám komentár Test1 a vložím do Test2, potom sa skúška chytenia nezastaví na linke, len sa odhlási do konzoly.

Ako môžem získať VS2012, aby sa zastavil na chybovej čiare, aj keď je obklopený vyskúšaním príkazu catch?

private void Button_Click(object sender, RoutedEventArgs e)
{
//Test1(); // No try catch - stops on error line dividing by zero.
Test2(); // Try catch - Just writes out to console.
}

private void MakeError()
{
int i = -1;
i += 1;
int j = 1 / i;
Console.WriteLine(j.ToString());
}

void Test1()
{
Console.WriteLine("MakeError in Test1");

MakeError();
}

void Test2()
{
Console.WriteLine("MakeError in Test2");
try
{
MakeError();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

odpovede:

4 pre odpoveď č. 1

Zatiaľ čo ostatné odpovede sú správne, ide o zámerné správanie v predvolenom nastavení.

Ako: Break Keď je výnimka vyvolaná:

V ponuke Debug kliknite na položku Výnimky.

V dialógovom okne Výnimky vyberte možnosť Hozený pre celú kategóriu výnimiek, napríklad výnimky pre bežné používanie jazyka.

alebo

Rozbaľte uzol pre kategóriu výnimiek, napríklad Common Language Runtime Exception (Výnimky bežného jazyka) a vyberte možnosť Thrown (Hozený) pre konkrétnu výnimku v rámci tejto kategórie.


1 pre odpoveď č. 2

Čo chcete, je Visual Studio prerušenie vykonania, keď je vyvolaná výnimka:

V ponuke Debug kliknite na položku Výnimky.

V dialógovom okne Výnimky vyberte možnosť Hozený pre celú kategóriu výnimiek, napríklad (váš prípad), Výnimky bežného jazykového behu.

Referencia MSDN.


0 pre odpoveď č. 3

Visual Studio bude zasahovať iba v prípade, že existuje neošetrená výnimka, v tomto prípade delenie 0. try...catch s výnimkou. Vzhľadom k tomu, že neexistuje žiadna výnimka vľavo nespracované, Visual Studio nebude vyskočiť.


0 pre odpoveď č. 4

Príkazy try a catch sú určené na to, aby sa priebeh vykonávania mohol aj naďalej vyskytovať, aj keď nastane výnimka. Ladiaci program sa zastaví len vtedy, keď je výnimka neošetrená, čo je try catch robí.

To je úmyselné.