Forge
csharp4405de34
1namespace DebugTarget;
2
3/// <summary>Небольшая «живая» цель для отладки из Cascade IDE (не запускать саму IDE как debuggee).</summary>
4internal static class Program
5{
6 private static async Task Main(string[] args)
7 {
8 Console.WriteLine("DebugTarget — тестовая цель отладки Cascade IDE.");
9
10 var input = args.Length > 0 ? args : ["7", "3", "-2", "oops", "11", "0"];
11 var numbers = ParseInput(input);
12 Console.WriteLine($"parsed={string.Join(", ", numbers)}");
13
14 var report = await BuildReportAsync(numbers);
15 Console.WriteLine($"sum={report.Sum}; even={report.EvenCount}; risky={report.RiskyResult}");
16
17 foreach (var line in report.Trace)
18 Console.WriteLine(line);
19 }
20
21 private static List<int> ParseInput(string[] args)
22 {
23 var numbers = new List<int>(args.Length);
24 foreach (var raw in args)
25 {
26 if (int.TryParse(raw, out var n))
27 {
28 numbers.Add(n);
29 continue;
30 }
31
32 // Intentional branch for debugger conditions.
33 if (raw.Length > 3)
34 numbers.Add(raw.Length);
35 }
36
37 return numbers;
38 }
39
40 private static async Task<Report> BuildReportAsync(IReadOnlyList<int> numbers)
41 {
42 var trace = new List<string>();
43 var sum = 0;
44 var evenCount = 0;
45
46 for (var i = 0; i < numbers.Count; i++)
47 {
48 var current = numbers[i];
49 var weighted = current * (i + 1);
50 sum += weighted;
51
52 if ((current & 1) == 0)
53 evenCount++;
54
55 trace.Add($"i={i}; n={current}; weighted={weighted}; sum={sum}");
56 await Task.Delay(20);
57 }
58
59 var risky = TryComputeRisky(numbers, trace);
60 return new Report(sum, evenCount, risky, trace);
61 }
62
63 private static int TryComputeRisky(IReadOnlyList<int> numbers, List<string> trace)
64 {
65 try
66 {
67 var firstNegative = numbers.FirstOrDefault(static n => n < 0);
68 if (firstNegative == 0)
69 throw new InvalidOperationException("No negative number found.");
70
71 var divisor = Math.Abs(firstNegative) - 2;
72 var source = numbers.Max();
73 var result = checked(source / divisor);
74 trace.Add($"risky: source={source}; divisor={divisor}; result={result}");
75 return result;
76 }
77 catch (Exception ex)
78 {
79 trace.Add($"risky failed: {ex.GetType().Name}; msg={ex.Message}");
80 return -1;
81 }
82 }
83
84 private sealed record Report(int Sum, int EvenCount, int RiskyResult, IReadOnlyList<string> Trace);
85}
86
View only · write via MCP/CIDE