Skip to content

Commit fff492d

Browse files
committed
fixup
1 parent 6a2a8c1 commit fff492d

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

layouts/optimal_debugging.shtml

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
and many performance tradeoffs, they are hard to fuzz test.
5050
</li>
5151
<li> <a id ="detectable_ub"><b>Detectable Undefined Behavior</b></a>
52-
TODO make table of tools
52+
TODO make table of tools, C,C++,zig -OReleaseSafe
5353
</li>
5454
<li> <a id ="undetectable_ub"><b>Undetectable Undefined Behavior</b></a>
5555
Staring at source code, backend intermediate representation like LLVM
@@ -75,18 +75,46 @@
7575
- 8.data races sanitizer
7676
</li>
7777
<li> <a id ="resource_leaks"><b>Resource leaks (Freestanding/Kernel)</b></a>
78-
TODO sanitizers
78+
TODO sanitizers (valgrind etc)
7979
</li>
8080
<li> <a id ="freezes"><b>Freezes (deadlocks, softlocks, signal safety, unbounded loops etc)</b></a>
8181
TODO sanitizer, validator, stepping
8282
</li>
8383
<li> <a id ="perf_problems"><b>Performance problems</b></a>
84-
TODO
84+
TODO simulator, tracer
8585
</li>
8686
<li> <a id ="logic_problems"><b>Logic problems</b></a>
87-
TODO
87+
Logic problems of software systems can be described as problems
88+
related to incorrectly applied logic of how the code is solving the
89+
intended and follow-up problems ignoring hardware problems, kernel
90+
problems, different types of UB, miscompilations, memory problems,
91+
resource leaks, freezes and performance issues. <br>
92+
This typically includes
93+
<ol>
94+
<li>software requirements or their handling</li>
95+
<li>(temporary) inconstency of state (relations)</li>
96+
<li>incorrect math, for example not covering edge cases</li>
97+
<li>incorrect modeling of external and internal state and synchronization</li>
98+
<li>incorrect protocol handling</li>
99+
</ol>
100+
and is usually caused by
101+
<ol>
102+
<li> incorrect constrains on the design, meaning how the different
103+
parts should interact and work towards the goals for the use
104+
cases</li>
105+
<li> unclear, unspecified or incorrectly assumed hardware or software
106+
guarantees by components </li>
107+
<li> implementation oversights, unintended use cases, unfeasibility
108+
of a general solution due to constrains like time, money etc</li>
109+
</ol>
88110
</li>
89111
</ol>
112+
Ideally, only the system behavior and interactions with domain and
113+
use-case specific parts (<b>2. Kernel and platform problems</b>,
114+
<b>10. Logic problems</b>) need cognitive load from the programmer, whereas
115+
the other error classes should have standard approaches to isolate and eliminate.
116+
Unifying debug tooling simplifies usage for bigger developer productivity
117+
and exposing as library allows to automate this process.
90118
</div>
91119
</div>
92120
</div>

0 commit comments

Comments
 (0)