| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
原始链接: https://news.ycombinator.com/item?id=39568728
至于调试 Bash 脚本,我个人认为类似于调试汇编语言程序或低级机器指令。 每个细节都很重要,细微的变化可能会导致行为上的显着差异。 这与高级编程语言不同,在高级编程语言中,编译器处理大部分细节,并且错误往往会在编译过程的早期阶段显现出来。 使用 Bash 脚本,追踪导致特定结果的事件的确切顺序可能具有挑战性,特别是在处理涉及嵌套循环和条件语句的复杂逻辑时。 Bash 可以使用调试器,但它们会增加额外的复杂性,并且通常需要深入了解 Bash 的内部结构才能有效使用。 许多人选择插入临时 printf 或 echo -e 语句以在执行期间输出中间结果,或手动存储和检查变量以查明所需结果与实际结果之间的差异。 最终,Bash 仍然是一个不完美但不可或缺的自动化重复任务工具,虽然较新的语言出现细微错误的机会较少,但 Bash 脚本允许的固有较低级别控制使创建针对特定要求的自定义脚本具有更大的灵活性。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Hitting ctrl-t on our main menu will, when booting with debug logging enabled, show a screen like this: https://i.imgur.com/Ge75zkP.png
We also have a flamegraph profiling mechanism that can be enabled with https://github.com/zbm-dev/zfsbootmenu/blob/master/zfsbootme... . That will dump data to a serial port, which when re-assembled, can be used to produce a graph like https://raw.githubusercontent.com/zbm-dev/zfsbootmenu/master...
Bash is suprisingly flexible.
reply