Add stepping implementation related documentation.
authorMikhail Kurinnoi <m.kurinnoi@samsung.com>
Tue, 16 Feb 2021 12:48:36 +0000 (04:48 -0800)
committerAlexander Soldatov/Platform Lab /SRR/Staff Engineer/Samsung Electronics <soldatov.a@samsung.com>
Wed, 18 May 2022 16:34:16 +0000 (19:34 +0300)
docs/files/stepping_callbacks_scheme.drawio [new file with mode: 0644]
docs/files/stepping_callbacks_scheme.png [new file with mode: 0644]
docs/files/stepping_protocol_scheme.drawio [new file with mode: 0644]
docs/files/stepping_protocol_scheme.png [new file with mode: 0644]
docs/files/stepping_sequence_diagram.drawio [new file with mode: 0644]
docs/files/stepping_sequence_diagram.png [new file with mode: 0644]
docs/stepping.md [new file with mode: 0644]

diff --git a/docs/files/stepping_callbacks_scheme.drawio b/docs/files/stepping_callbacks_scheme.drawio
new file mode 100644 (file)
index 0000000..354239f
--- /dev/null
@@ -0,0 +1 @@
+<mxfile host="app.diagrams.net" modified="2021-02-16T13:21:37.216Z" agent="5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" etag="-ZMATuOyV7U_3GQCjWzb" version="14.3.2" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
\ No newline at end of file
diff --git a/docs/files/stepping_callbacks_scheme.png b/docs/files/stepping_callbacks_scheme.png
new file mode 100644 (file)
index 0000000..c2b615c
Binary files /dev/null and b/docs/files/stepping_callbacks_scheme.png differ
diff --git a/docs/files/stepping_protocol_scheme.drawio b/docs/files/stepping_protocol_scheme.drawio
new file mode 100644 (file)
index 0000000..4378833
--- /dev/null
@@ -0,0 +1 @@
+<mxfile host="app.diagrams.net" modified="2021-02-16T09:08:37.558Z" agent="5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36" etag="u7d15vJS2pQa1Wpw8XVK" version="14.3.2" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">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</diagram></mxfile>
\ No newline at end of file
diff --git a/docs/files/stepping_protocol_scheme.png b/docs/files/stepping_protocol_scheme.png
new file mode 100644 (file)
index 0000000..1d55aef
Binary files /dev/null and b/docs/files/stepping_protocol_scheme.png differ
diff --git a/docs/files/stepping_sequence_diagram.drawio b/docs/files/stepping_sequence_diagram.drawio
new file mode 100644 (file)
index 0000000..77bf082
--- /dev/null
@@ -0,0 +1 @@
+<mxfile host="app.diagrams.net" modified="2021-03-01T11:03:33.954Z" agent="5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36" etag="LJerl-4qLnHhoi3RQpBQ" version="14.4.3" type="device"><diagram name="Page-1" id="13e1069c-82ec-6db2-03f1-153e76fe0fe0">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</diagram></mxfile>
\ No newline at end of file
diff --git a/docs/files/stepping_sequence_diagram.png b/docs/files/stepping_sequence_diagram.png
new file mode 100644 (file)
index 0000000..c47a25b
Binary files /dev/null and b/docs/files/stepping_sequence_diagram.png differ
diff --git a/docs/stepping.md b/docs/stepping.md
new file mode 100644 (file)
index 0000000..add2721
--- /dev/null
@@ -0,0 +1,139 @@
+# Stepping implementation in NetcoreDBG.\r
+\r
+## Async method stepping.\r
+\r
+Overal info about async/await:</br>\r
+https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/</br>\r
+https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/async</br>\r
+\r
+Good article about async/await realization in Russian:</br>\r
+https://m.habr.com/ru/post/260217/\r
+\r
+Main points about async/await in perspective of debugger work:\r
+* At compilation time, async method "converted" to state machine.\r
+* All user code moved into `MoveNext` method.\r
+* PDB provide asyncMethodSteppingInformationBlob with all information debugger need (yield and resume offsets).\r
+* During await execution, thread could be changed.\r
+* Since we have code changed into state machine and thread could be changed, debugger can't use ICorDebugStepper directly.\r
+* State machine's task builder provide `ObjectIdForDebugger` property's getter, that could be called by debugger on yield and resume offsets in order to get unique "async id".\r
+\r
+So, main difference that for async method stepping in case method have await block are breakpoints (for yield and resume offsets) and ICorDebugStepper usage instead of ICorDebugStepper only usage. In the same time, since debugger in case of async stepping use breakpoints and could have different thread at resume offset, plus, debuggee process could have parallel execution for same async method, `ObjectIdForDebugger` property's getter must be used in order to track and detect proper thread.\r
+\r
+## Yield and resume offsets.\r
+\r
+**Yield offset** is point at the beginning of await block code, could be used in order to detect await related code start.\r
+**Resume offset** is point at the end of await block code, where debugger could use ICorDebugStepper for finish step (step from internal await code to closest user code line IL offset).\r
+\r
+Example of simple code with async `Main`:\r
+\r
+```csharp\r
+static async Task Main(string[] args)\r
+{\r
+    Console.WriteLine("Before await.");\r
+    await Task.Delay(1000);\r
+    Console.WriteLine("After await.");\r
+}\r
+```\r
+\r
+`Main` "converted" during compilation into state machine with `MoveNext` method (disassembled by ildasm):\r
+\r
+```\r
+.method private hidebysig newslot virtual final \r
+        instance void  MoveNext() cil managed\r
+{\r
+  .override [System.Runtime]System.Runtime.CompilerServices.IAsyncStateMachine::MoveNext\r
+  // Code size       181 (0xb5)\r
+  .maxstack  3\r
+  .locals init (int32 V_0,\r
+           valuetype [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter V_1,\r
+           class test.Program/'<Main>d__0' V_2,\r
+           class [System.Runtime]System.Exception V_3)\r
+  IL_0000:  ldarg.0\r
+  IL_0001:  ldfld      int32 test.Program/'<Main>d__0'::'<>1__state'\r
+  IL_0006:  stloc.0\r
+  .try\r
+  {\r
+    IL_0007:  ldloc.0\r
+    IL_0008:  brfalse.s  IL_000c\r
+    IL_000a:  br.s       IL_000e\r
+    IL_000c:  br.s       IL_0057\r
+    IL_000e:  nop\r
+    IL_000f:  ldstr      "Before await."\r
+    IL_0014:  call       void [System.Console]System.Console::WriteLine(string)\r
+    IL_0019:  nop\r
+    IL_001a:  ldc.i4     0x3e8\r
+    IL_001f:  call       class [System.Runtime]System.Threading.Tasks.Task [System.Runtime]System.Threading.Tasks.Task::Delay(int32)\r
+    IL_0024:  callvirt   instance valuetype [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter [System.Runtime]System.Threading.Tasks.Task::GetAwaiter()\r
+    IL_0029:  stloc.1\r
+    IL_002a:  ldloca.s   V_1\r
+    IL_002c:  call       instance bool [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter::get_IsCompleted()\r
+    IL_0031:  brtrue.s   IL_0073\r
+    IL_0033:  ldarg.0\r
+    IL_0034:  ldc.i4.0\r
+    IL_0035:  dup\r
+    IL_0036:  stloc.0\r
+    IL_0037:  stfld      int32 test.Program/'<Main>d__0'::'<>1__state'\r
+    IL_003c:  ldarg.0\r
+    IL_003d:  ldloc.1\r
+    IL_003e:  stfld      valuetype [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter test.Program/'<Main>d__0'::'<>u__1'\r
+    IL_0043:  ldarg.0\r
+    IL_0044:  stloc.2\r
+    IL_0045:  ldarg.0\r
+    IL_0046:  ldflda     valuetype [System.Runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder test.Program/'<Main>d__0'::'<>t__builder'\r
+    IL_004b:  ldloca.s   V_1\r
+    IL_004d:  ldloca.s   V_2\r
+    IL_004f:  call       instance void [System.Runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder::AwaitUnsafeOnCompleted<valuetype [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter,class test.Program/'<Main>d__0'>(!!0&,\r
+                                                                                                                                                                                                                                             !!1&)\r
+    IL_0054:  nop\r
+    IL_0055:  leave.s    IL_00b4\r
+    IL_0057:  ldarg.0\r
+    IL_0058:  ldfld      valuetype [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter test.Program/'<Main>d__0'::'<>u__1'\r
+    IL_005d:  stloc.1\r
+    IL_005e:  ldarg.0\r
+    IL_005f:  ldflda     valuetype [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter test.Program/'<Main>d__0'::'<>u__1'\r
+    IL_0064:  initobj    [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter\r
+    IL_006a:  ldarg.0\r
+    IL_006b:  ldc.i4.m1\r
+    IL_006c:  dup\r
+    IL_006d:  stloc.0\r
+    IL_006e:  stfld      int32 test.Program/'<Main>d__0'::'<>1__state'\r
+    IL_0073:  ldloca.s   V_1\r
+    IL_0075:  call       instance void [System.Runtime]System.Runtime.CompilerServices.TaskAwaiter::GetResult()\r
+    IL_007a:  nop\r
+    IL_007b:  ldstr      "After await."\r
+    IL_0080:  call       void [System.Console]System.Console::WriteLine(string)\r
+    IL_0085:  nop\r
+    IL_0086:  leave.s    IL_00a0\r
+  }  // end .try\r
+  catch [System.Runtime]System.Exception \r
+  {\r
+    IL_0088:  stloc.3\r
+    IL_0089:  ldarg.0\r
+    IL_008a:  ldc.i4.s   -2\r
+    IL_008c:  stfld      int32 test.Program/'<Main>d__0'::'<>1__state'\r
+    IL_0091:  ldarg.0\r
+    IL_0092:  ldflda     valuetype [System.Runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder test.Program/'<Main>d__0'::'<>t__builder'\r
+    IL_0097:  ldloc.3\r
+    IL_0098:  call       instance void [System.Runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder::SetException(class [System.Runtime]System.Exception)\r
+    IL_009d:  nop\r
+    IL_009e:  leave.s    IL_00b4\r
+  }  // end handler\r
+  IL_00a0:  ldarg.0\r
+  IL_00a1:  ldc.i4.s   -2\r
+  IL_00a3:  stfld      int32 test.Program/'<Main>d__0'::'<>1__state'\r
+  IL_00a8:  ldarg.0\r
+  IL_00a9:  ldflda     valuetype [System.Runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder test.Program/'<Main>d__0'::'<>t__builder'\r
+  IL_00ae:  call       instance void [System.Runtime]System.Runtime.CompilerServices.AsyncTaskMethodBuilder::SetResult()\r
+  IL_00b3:  nop\r
+  IL_00b4:  ret\r
+} // end of method '<Main>d__0'::MoveNext\r
+```\r
+\r
+In this case, PDB provide `yield` offset 60 (hex 3C, see `IL_003c` in IL code above) and `resume` offset 87 (hex 57, see `IL_0057` in IL code above).\r
+\r
+## Stepping logic, protocol related part block-scheme.\r
+![Stepping protocol scheme](./files/stepping_protocol_scheme.png)\r
+## Stepping logic, runtime callbacks related part block-scheme.\r
+![Stepping callbacks scheme](./files/stepping_callbacks_scheme.png)\r
+## Sequence diagram for step over await line in async method.\r
+![Stepping callbacks scheme](./files/stepping_sequence_diagram.png)\r