|
49 | 49 | and many performance tradeoffs, they are hard to fuzz test.
|
50 | 50 | </li>
|
51 | 51 | <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 |
53 | 53 | </li>
|
54 | 54 | <li> <a id ="undetectable_ub"><b>Undetectable Undefined Behavior</b></a>
|
55 | 55 | Staring at source code, backend intermediate representation like LLVM
|
|
75 | 75 | - 8.data races sanitizer
|
76 | 76 | </li>
|
77 | 77 | <li> <a id ="resource_leaks"><b>Resource leaks (Freestanding/Kernel)</b></a>
|
78 |
| - TODO sanitizers |
| 78 | + TODO sanitizers (valgrind etc) |
79 | 79 | </li>
|
80 | 80 | <li> <a id ="freezes"><b>Freezes (deadlocks, softlocks, signal safety, unbounded loops etc)</b></a>
|
81 | 81 | TODO sanitizer, validator, stepping
|
82 | 82 | </li>
|
83 | 83 | <li> <a id ="perf_problems"><b>Performance problems</b></a>
|
84 |
| - TODO |
| 84 | + TODO simulator, tracer |
85 | 85 | </li>
|
86 | 86 | <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> |
88 | 110 | </li>
|
89 | 111 | </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. |
90 | 118 | </div>
|
91 | 119 | </div>
|
92 | 120 | </div>
|
|
0 commit comments