Debugging Lotus 1-2-3 by faxa year agohttps://blog.jgc.org/2025/03/debugging-lotus-1-2-3-by-fax.html1990年,作者通过传真协助调试Lotus 1-2-3表格软件,因为当时跨大西洋电话费用昂贵。调试第零定律在此场景中被证明至关重要。调试过程涉及使用命令'/ppomr'检查Lotus 1-2-3的右边距设置。对于跨大陆的技术支持,传真是比语音电话更经济高效的替代方案。作者后来找到了当年的实际传真件,追忆这段调试往事。
Bringing Record and Replay debugging everywhere on Linuxa year agohttps://github.com/sidkshatriya/me/blob/master/008-rr-everywhere.md改进rr调试器使其无需依赖CPU硬件性能计数器即可运行,从而支持在云虚拟机和容器中使用推出软件计数器模式的rr,采用轻量级动态与静态插桩技术记录与回放(rr)技术通过记录非确定性因素,确保程序能在多次回放中完全一致地运行该技术通过捕获包括用户输入、网络调用和线程调度在内的精确程序状态,对调试极具价值rr是唯一满足广泛可用性、高性能且兼容gdb/lldb等标准的开源系统软件计数器模式的rr解决了必须依赖CPU硬件性能计数器的限制,大大扩展了rr的适用范围该项目源于将rr移植到Rust语言的挑战,以及在受限环境中使用rr的实际需求关于构建和运行软件计数器模式rr的详细指南已在GitHub平台发布
War story: the hardest bug I ever debuggeda year agohttps://www.clientserver.dev/p/war-story-the-hardest-bug-i-everGoogle文档突然出现大量致命错误,但无明显原因或用户投诉该漏洞仅出现在Chrome浏览器中,始于特定版本,导致诊断困难复现方法需创建大型文档并反复加粗/取消加粗文本,发现该漏洞具有随机性调查发现是布局引擎中子像素渲染错误随时间累积导致漏洞的随机性和缓慢的复现步骤使调试过程异常复杂与同事和技术主管的合作对定位根本原因至关重要问题根源是V8引擎优化漏洞——Math.abs()错误返回负值临时解决方案包括浏览器版本检查及手动修正Math.abs()V8团队已修复该问题,凸显调试外部依赖项的挑战性这次经历深刻揭示了复杂软件调试工作的不可预测性和挫败感
Show HN: Await-Tree – Visualize Async Rust Task Execution in Real-Timea year agohttps://github.com/risingwavelabs/await-treeAsync Rust 的 Futures 可以通过组合或嵌套实现多种控制流异步任务的执行可被可视化为随时间变化的逻辑树形结构`await-tree` 支持运行时转储带有标注 spans 的执行树支持运行时动态定制 `String` 类型的 spans 以便调试能处理复杂的异步控制流和任意 `Future` 拓扑结构采用基于内存池的数据结构且无需额外 `unsafe` 代码可选功能包括支持 `serde` 序列化和 `tokio` 运行时集成相比 `async-backtrace`,`await-tree` 提供更灵活的调试能力和更高的安全性已被分布式流式数据库 RisingWave 应用于生产环境采用 Apache License 2.0 开源协议
Diagnosing bugs preventing sleep on Windowsa year agohttps://peteronprogramming.wordpress.com/2025/04/02/diagnosing-bugs-preventing-s...通过断点和Windows API可以轻松诊断阻止Windows自动锁定和休眠的程序。问题追踪到一个基于CEF的应用程序中的隐藏对话框,该对话框保持了一个电源请求处于活动状态,从而阻止了锁屏和休眠模式。使用`powercfg`、`pwrtest`等工具以及带有Microsoft-Windows-Kernel-Power提供程序的ETW可以帮助监控和诊断电源请求。在确定隐藏对话框为根本原因后,该错误被修复。
Pdeathsig is almost never what you wanta year agohttps://www.recall.ai/post/pdeathsig-is-almost-never-what-you-want作者的任务是优化Recall.ai平台的输出媒体启动延迟问题。输出媒体功能通过沙盒环境中的Chromium浏览器(使用Bubblewrap工具)将客户提供的网页渲染为音视频流供机器人使用。最初由于激活输出媒体时Chromium需要消耗大量资源启动,导致延迟高达12秒。解决方案计划在机器人启动时预加载Chromium以减少延迟。测试发现尽管父进程仍在运行,Chromium会意外终止。调试发现根本原因是Bubblewrap的--die-with-parent参数使用了Linux的PR_SET_PDEATHSIG机制。PR_SET_PDEATHSIG跟踪的是父线程而非父进程,这与Tokio运行时线程管理方式产生冲突。Tokio动态线程停放和回收机制导致Chromium被提前终止。移除--die-with-parent参数后问题解决,延迟降至2-3秒。该优化方案通过大幅缩短等待时间显著提升了客户体验。
AI isn't ready to replace human coders for debugging, researchers saya year agohttps://arstechnica.com/ai/2025/04/researchers-find-ai-is-pretty-bad-at-debuggin...人工智能被广泛应用于软件开发中,从代码辅助到应用程序构建都有涉及。由于调试能力不足,AI代理目前尚无法取代大多数程序员。微软研究院开发了debug-gym工具来提升AI的代码调试能力。debug-gym为AI模型提供了设置断点、代码导航等调试工具。使用debug-gym后AI模型表现有所提升,但仍落后于人类开发者。交互式调试工具能帮助AI代理更有效地处理现实中的软件开发任务。仍需人工监督审核AI提出的修复方案,确保其符合具体上下文逻辑。
Peering into the Linux Kernel with Tracea year agohttps://alexdowad.github.io/peering-in-the-kernel-with-trace/作者遇到间歇性测试失败,原因是文件访问时间发生了意外变化。使用strace未能揭示原因,因此怀疑是其他进程或内核错误。最终使用了BCC工具中的trace来实时监控内核函数调用。将trace配置为监控touch_atime函数,发现是Sublime Text的后台线程在访问文件。问题根源是Sublime Text的git集成功能在更新访问时间。作者强调了trace在调试中的强大功能,并将其加入了自己的工具库。整个过程包括解析探针规范、将其转换为eBPF字节码,并使用kprobes进行监控。文章强调了系统设计透明性对简化调试的重要性。
The case of the UI thread that hung in a kernel calla year agohttps://devblogs.microsoft.com/oldnewthing/20250411-00/?p=111066客户报告了一个UI线程挂起问题,由于堆栈被换出而无法诊断该线程被挂起超过五小时,但未附加调试器来解释挂起原因发现同一进程内的看门狗线程会挂起UI线程以捕获堆栈跟踪,从而导致死锁死锁发生的原因是UI线程持有看门狗线程捕获堆栈跟踪所需的锁挂起同一进程内的线程存在死锁风险,如果被挂线程持有其他线程所需的资源解决方案是使用外部进程实现看门狗功能以避免死锁内核会延迟线程挂起以避免中断关键操作,但这不能防止用户模式的死锁微软关于线程挂起和加载器锁的设计选择受到批评,但根本问题在于进程内看门狗机制
Using Python's .__dict__ to Work with Attributes – Real Pythona year agohttps://realpython.com/python-dict-attribute/Python的.__dict__是类和实例中的一个特殊属性,它将属性名映射到对应的值。.__dict__允许动态检查、修改、添加或删除属性,这使得它在元编程和调试中非常有用。vars()和.__dict__都可以检查对象的属性,其中.__dict__提供了对对象命名空间的直接访问。.__dict__的常见用例包括动态属性管理、内省、序列化和调试。.__dict__是Python数据模型的基础,解释器在内部使用它来实现动态属性访问。类和实例有独立的.__dict__属性,实例的.__dict__仅包含实例特有的属性。函数也有.__dict__属性,可以用来附加元数据或用于缓存目的。内置函数和数据类型可能没有.__dict__属性,因为它们是用C语言实现的以提高效率。.__dict__可用于记忆化、将对象序列化为JSON,以及通过__getattribute__和__setattr__等特殊方法自定义属性访问。描述符可以利用.__dict__来避免在实现__get__和__set__方法时出现递归问题。
Debugging Nginx: why my SSL certificates don't apply after reload?a year agohttps://blog.nathanaelbonfim.com/posts/debugging-nginx-why-your-ssl-certificates...用于创建新nginx主机的自动化脚本停止工作,请求被重定向到其他主机而非目标站点证书续期遇到类似问题,只有完全重启nginx后站点才能正常工作调试发现Nginx达到了最大文件描述符限制,导致无法正常重载配置解决方案包括修改nginx.conf中的worker_rlimit_nofile参数,并为服务创建systemd限制覆盖解释Nginx中'reload'与'restart'的区别:reload优雅更新配置,restart会先关闭所有连接诊断步骤包括检查进程限制和当前文件描述符使用情况修复需要更新Nginx配置并创建systemd覆盖文件,然后应用变更并验证修复效果
Being a top programmer: Don't get stucka year agohttps://medium.com/@matt.simmons/the-secret-to-being-a-top-programmer-dont-get-s...程序员每天面临各种问题,有些微不足道,有些则复杂棘手——若缺乏系统性处理,可能耗费数小时。采用系统性解题方法(类似侦探和科学家的方法论)能显著提升工作效率。关键策略包括:避免直接依赖ChatGPT、有效利用错误信息、在本地复现问题以锁定根源。查阅文档、检查拼写错误、确认权限和环境变量设置正确,这些都是调试过程中的关键步骤。高阶技巧包含原子化测试、排除缓存结果干扰、运用科学方法论逐步排除潜在诱因。陷入困境时,向同事或资深开发者求助可获得新视角,但需注意避免提出XY问题(询问错误的核心问题)。若所有方法均告失败,不妨带着新知识重新审视问题,或设计替代解决方案。
Show HN: A VS Code extension to visualise Rust logs in the context of your codea year agohttps://github.com/hyperdrive-eng/traceback用于将遥测数据(跟踪、日志、指标)集成到代码中的VS Code扩展。安装扩展并通过复制/粘贴、文件、网页或Axiom.co导入日志。通过选择存储库并设置Claude API密钥来使用日志调试代码。通过点击日志行并导航调用堆栈来查看上下文中的日志。克隆演示存储库'hyperdrive-eng/playground'以测试功能。从存储库加载演示日志并探索日志及其父级上下文。
Kmemdump Proposed for the Linux Kernel to Help with Memory Dumping and Debugginga year agohttps://www.phoronix.com/news/kmemdumpLinaro的Eugen Hristev提出了Linux内核的kmemdump功能,通过转储特定内存区域辅助调试。Kmemdump允许内核驱动程序注册内存块,便于在系统问题或调试期间快速转储。该基础设施通过聚焦于标记为重要的调试内存区域,避免转储整个RAM。只要硬件支持,即使内核崩溃或冻结,kmemdump仍能保存受监控的内存区域。内存区域可被组装成coredump ELF文件,供GDB等工具分析。初期主要适配高通硬件,以Qualcomm Minidump作为kmemdump的后端实现。Kmemdump独立于pstore、kdump和kexec运行,适用于这些机制失效的设备场景。它生成类似/proc/vmcore的核心镜像,仅包含注册区域供分析使用。Kmemdump在初始化时注册必要内核信息,无需用户额外操作。
Searching for the cause of hung tasks in the Linux kernela year agohttps://blog.cloudflare.com/searching-for-the-cause-of-hung-tasks-in-the-linux-k...当进程在不可中断状态(TASK_UNINTERRUPTIBLE)中阻塞时间过长时,Linux内核会产生hung task警告hung task警告由khungtaskd守护进程触发,该进程会检查处于D状态(TASK_UNINTERRUPTIBLE)的进程处于D状态的进程不能被信号中断,可能表明存在系统资源问题或子系统过载引入TASK_KILLABLE状态是为了允许通过致命信号终止进程,同时仍保护进程内存示例1:由于缺少no_read_workqueue/no_write_workqueue标志导致XFS文件系统变慢,引发hung task警告示例2:生成核心转储的进程可能触发hung task警告,因为内核会以D状态保护内存示例3:内核网络子系统中的rtnl_mutex锁导致多个进程挂起,通过BPF追踪技术发现该问题调试hung task需要分析堆栈跟踪、检查系统指标,并使用bpftrace和drgn等工具hung task警告对于识别系统问题很有价值,但可能指向的是受害者而非根本原因
Writing a Linux Debugger (2017)a year agohttps://blog.tartanllama.xyz/writing-a-linux-debugger-setup/调试器是开发者的必备工具,但关于其工作原理或如何编写调试器的资料却十分有限。本系列教程旨在解析调试器机制,并指导编写Linux调试器,涵盖执行控制、断点设置、内存访问和单步执行等核心功能。该调试器将支持输出标准DWARF调试信息的C/C++程序,侧重功能实现而非健壮的错误处理机制。环境配置需要Linenoise(命令行输入处理)和libelfin(调试信息解析)等依赖项,文档包含详细的安装与构建说明。调试器通过fork/exec启动被调试程序,利用ptrace系统调用实现进程控制与状态监控。采用交互式命令循环架构,支持类gdb/lldb的指令集,首期版本已实现程序继续执行功能。后续章节将逐步扩展断点管理、寄存器/内存操作等高级调试特性。
Differential Coverage for Debugginga year agohttps://research.swtch.com/diffcover差分覆盖率通过比较通过测试与失败测试的代码覆盖率,定位问题代码段该技术首先生成通过测试和失败测试的覆盖率图谱,然后进行差异比对以发现独特的代码路径示例中通过高亮失败测试独有的代码,成功识别出`natmul.go`文件中的缺陷差分覆盖率效率极高,能从数千行代码中精确定位相关代码段该方法虽非万全之策,但对由失败触发的缺陷尤为有效即使是单一失败测试的基础覆盖率图谱,也能通过显示执行路径辅助调试该技术同样适用于分析通过测试,例如识别`net/http`中SOCKS5代理实现等特定功能
Show HN: Web-eval-agent – Let the coding agent debug itselfa year agohttps://github.com/Operative-Sh/web-eval-agentoperative.sh的MCP服务器推出浏览器驱动代理,可在代码编辑器中实现自主网页应用调试功能包括:浏览器导航(速度提升2倍)、网络流量捕获、控制台错误收集和自主调试使用前提:需安装Homebrew、npm和jq安装步骤:获取免费API密钥后,从operative.sh下载并运行脚本设置流程:安装uv工具、web-eval-agent调试代理及playwright测试框架示例任务:测试API密钥删除流程,包含详细步骤和成功用户体验反馈调试过程中自动捕获并展示控制台日志和网络请求提供调试事件的时间轴记录由operative.sh倾力打造,提供实时日志仪表盘
Recognizing Patterns in Memory (2022)a year agohttps://www.timdbg.com/posts/recognizing-patterns/调试技巧需要经验积累和模式识别能力内存模式异常可能暗示数据损坏问题32/64位对齐数据是文件格式和内存结构的常见特征内存中的指针通常遵循特定的地址模式UTF-16编码文本可通过零字节与ASCII值交替出现来识别x64代码中常出现'CC'字节序列和'C3'返回指令高熵值数据通常表明内容经过压缩或加密处理
Bambu Lab added anti-debugger code in their BBL network plugina year agohttps://github.com/bambulab/BambuStudio/issues/6726BBL网络插件自1.10.2版本起加入调试器检测功能,若检测到调试器则强制终止应用该限制导致开发者无法使用Visual Studio等带调试功能的开发工具,阻碍开源项目贡献插件此前隐藏证书/网络协议等信息的尝试均已被破解,调试限制已无实际保护意义该限制迫使开发者必须破解网络插件才能参与开发,与开源精神背道而驰作者对开发过程中人为设置的不必要障碍表示失望,强调根本无意探究DLL的隐藏内容