DuckGPT – agent for solving complex coding problems5 months agohttps://duckgpt.vercel.appDuckGPT被介绍为一款用于解决编码问题的得力鸭子助手。鼓励用户逐行描述他们的编码问题以获取帮助。该服务承诺以橡皮鸭的智慧提供回应,暗示其通过解释来专注于调试过程。
Lot of software engineers don't understand basic networking5 months agohttps://oneuptime.com/blog/post/2025-12-12-why-software-engineers-dont-understan...大多数软件工程师缺乏深层网络知识,依赖抽象层工作。调试时抽象层会失效,导致在缺乏底层知识的情况下盲目排错。网络知识的缺失会导致调试时间延长、架构脆弱、安全隐患以及错过性能优化机会。需要掌握的关键网络概念包括OSI模型分层、IP寻址、TCP/UDP协议、DNS解析和HTTP/HTTPS。实用调试工具包括ping、traceroute、dig、curl、netstat、ss和tcpdump。理解分布式系统模式(如超时、重试、熔断和负载均衡)至关重要。推荐学习资源包括教科书、技术小册子、指南和云服务商文档。具备网络知识的工程师能更快调试、设计高容错系统并获得竞争优势。
Don't Gobble Up Errors5 months agohttps://programming.protips.wiki/dont-gobble-up-errors/避免静默吞没错误,确保错误被正确记录和处理让错误向上抛出通常比在try/catch块中进行错误处理更好反面示例:对缺失的trace_id返回null,这可能导致未定义行为良好实践:当必需的trace_id缺失时,抛出包含上下文信息的错误最佳实践:有时完全省略try/catch,让错误自然失败也是可接受的静默处理错误可能掩盖问题,由于缺乏日志或错误可见性而增加调试难度
A kernel bug froze my machine: Debugging an async-profiler deadlock5 months agohttps://questdb.com/blog/async-profiler-kernel-bug/一位Linux用户在使用async-profiler与QuestDB时遭遇系统冻结,追踪发现是6.17版本内核的一个漏洞。该漏洞是perf_events子系统中的死锁问题,具体发生在hrtimer_cancel函数内,导致系统冻结。通过使用-e ctimer选项启动分析器,可以规避有问题的内核功能,从而找到临时解决方案。用户搭建了QEMU环境进行内核调试,重现冻结现象并使用GDB实时检查死锁状态。调试发现当hrtimer_cancel在其自身回调函数中被调用时,会引发无限循环导致死锁。尝试通过GDB修改返回值手动修复死锁取得部分成功,但无法保证生产环境稳定性。最终结论是采用临时解决方案或等待内核修复,并从中获得了内核调试和perf_events子系统的重要经验。
Debug Mode for LLMs in vLLora5 months agohttps://vllora.dev/blog/debug-mode/vLLora为LLM请求引入了调试模式,允许在执行前检查和编辑请求内容。调试模式支持用户暂停、检查、修改并继续LLM请求,类似软件调试流程。核心功能包括:查看原始请求、编辑消息/参数/工具定义,以及断点续执行。该模式解决了工具调用静默失败、上下文污染和LLM流程不透明等常见问题。请求暂停时,用户可查看模型信息、消息数组、参数配置、工具定义及所有注入字段。调试期间的修改仅影响当前请求,无需改动应用代码即可快速验证测试方案。对智能代理场景尤其有用,能及早发现逻辑偏差,避免重跑冗长工作流。此功能旨在降低LLM系统调试复杂度,提升排错效率。
Hacking LLDB for a great Zig debugging experience5 months agohttps://joel.id/hacking-lldb-for-a-great-zig-debugging-experience/由于不可读的切片、可选类型和错误联合体,在LLDB中调试Zig编程语言具有挑战性。zdb作为LLDB插件被引入,无需重建LLDB或使用Python脚本即可改善Zig调试体验。该插件为Zig类型提供可读性输出,并支持在LLDB中使用类Zig表达式。zdb通过访问LLDB内部API、重写表达式及使用偏移量表实现跨LLDB版本的兼容性。当前限制包括缺乏GUI树形展开功能,但命令行表达式运行良好。对比显示zdb在易用性与实用性之间取得了平衡,优于原生LLDB、Python脚本和zig-lldb方案。
Kernighan's Lever5 months agohttps://linusakesson.net/programming/kernighans-lever/index.php最初编写代码时,调试的难度是其两倍。编写巧妙代码可能增加调试难度,但也能促进技能成长。Kernighan杠杆原理:调试挑战带来的动力能推动程序员长期进步。为避免调试困难而放弃巧妙技法,可能阻碍个人发展。当挑战与技能水平匹配时,程序员会进入心流状态。调试迫使程序员突破现有能力边界扩展技能。
Logging Sucks5 months agohttps://loggingsucks.com/日志记录在现代分布式系统中存在根本性缺陷。传统日志缺乏上下文且仅针对写入而非查询优化。由于格式不一致和关联缺失,在日志中进行字符串搜索效率低下。结构化日志是必要但不充分的调试手段。宽事件(规范日志行)为每个请求提供完整上下文。OpenTelemetry是传输机制,但未解决记录内容或添加上下文的问题。高基数和高维度数据使日志具备调试价值。尾部采样通过保留关键事件(错误、慢请求、VIP用户)来控制成本。宽事件将调试从考古式追溯转变为分析行为。现代工具支持高基数数据,使得宽事件具备可行性。
Finding Jingle Town: Debugging an N64 Game Without Symbols5 months agohttps://blog.chrislewis.au/finding-jingle-town-debugging-an-n64-game-without-sym...Ares是一款周期精确的N64模拟器,支持通过GDB进行远程调试。Ares可以运行原始ROM或基于反编译项目构建的ROM,确保字节级精确性。配置GDB远程调试需要创建反向隧道并将架构设置为MIPS:4000。GDB可连接Ares并使用反编译项目的ELF文件进行调试。支持通过函数名称设置断点,实现精细化调试会话。《雪地滑板小子2》中某函数会加载关卡特定覆盖层,全局变量currentLevelIndex指示当前关卡索引。测试证实当加载不同关卡时,该关卡索引会按预期规律变化。虽然调试过程需手动操作,但能有效理解游戏行为(如关卡初始化机制)。作者提及对可视化调试工具及外部生成调试符号的兴趣。《雪地滑板小子2》反编译项目开放贡献,更新动态通过Bluesky和Discord同步。
Parsing Advances5 months agohttps://matklad.github.io/2025/12/28/parsing-advances.html作者在圣诞假期编写了一个玩具解析器,灵感来自《弹性LL解析教程》重点在于生成语法树和诊断信息,而非在首个错误时就放弃解析陷阱:由于弹性解析特性可能导致无限循环/递归(未消耗词法单元)示例:解析函数参数列表时,若表达式未消耗词法单元就会陷入循环传统解决方案:采用'燃料'机制,并在心智中映射词法单元消耗函数新解决方案:通过断言解析进度,将心智映射显式化到代码中优势:能立即报错非推进式解析,并显式追踪词法单元消耗函数引入了基础解析器API来实现该方案提供了存在缺陷的函数示例来演示初始问题
The GDB JIT Interface5 months agohttps://bernsteinbear.com/blog/gdb-jit/GDB使用来自Clang、GCC和rustc等编译器的调试信息(DWARF格式)来提供调试功能。GDB在处理JIT编译函数时存在困难,因为指令指针不在调试信息表中,导致输出显示'???'。GDB提供的JIT接口需要实现`__jit_debug_register_code`等函数并管理链表(`jit_code_entry`)。该JIT接口涉及创建带有DWARF信息的ELF/Mach-O对象,过程复杂且需要稳定的内存指针。GDB还支持更灵活的新接口,允许使用自定义二进制格式,但需要加载reader插件到GDB中。新接口需要实现`gdb_read_debug_info`和`gdb_unwind_frame`等函数,但许多运行时仅保留存根未实现。有建议在GDB中复用Linux perf map接口来处理JIT符号,但功能会受限。V8指出JIT接口存在性能问题,因链表导致O(n²)复杂度,且需禁用移动GC来维持稳定性。ART通过将GDB JIT链表视为弱引用来处理死代码条目,并定期清理。
Profiling with Ctrl-C (2024)4 months agohttps://yosefk.com/blog/profiling-with-ctrl-c.htmlCtrl-C性能分析是一种简单但有效的方法,用于识别程序中的性能问题,尤其适用于在不友好环境中懒人遇到的‘愚蠢问题’。作者分享了个人经历,其中Ctrl-C分析帮助发现了调试版本中JSON解析缓慢和使用LLD链接器时GDB性能低下等问题,从而快速实现了修复。Ctrl-C分析因其简单性受到称赞,它比传统性能分析工具需要更少的设置,并且适用于标准分析工具可能无法工作的环境,例如不支持标准操作系统的芯片上。尽管有其优势,Ctrl-C分析也有局限性,例如它是一种采样频率较低的性能分析工具,因此不适合检测程序中非常小的变化或尾部延迟问题。文章将Ctrl-C分析与更复杂的性能分析方法进行了对比,强调了传统性能分析工具必要的场景,例如识别小的性能回归或分析多线程系统。作者最后认可Ctrl-C分析作为一种原始但往往出奇有效的工具,尤其是与更复杂、有时过度设计的性能分析解决方案相比。
Determining Current Arm Cortex-M Security State with GDB5 months agohttps://danielmangum.com/posts/arm-cortex-m-security-state-gdb/Armv8-M微控制器通常包含Cortex-M安全扩展(CMSE),即TrustZone技术。CMSE将存储器划分为安全区与非安全区,处理器状态会根据当前执行区域自动切换。栈指针(SP)可能对应主栈指针(MSP)或进程栈指针(PSP),具体取决于操作模式及CONTROL.SPSEL字段的配置。启用CMSE后,寄存器(如MSP/PSP)会区分安全版本(*_S)与非安全版本(*_NS)。通过检查SP当前匹配的栈指针变体(*_S或*_NS),可判定处理器的安全状态。使用GDB命令查看SP、PSP_NS、MSP_NS、PSP_S和MSP_S寄存器可快速确认安全状态。示例GDB输出显示:安全状态下SP匹配MSP_S,非安全状态下匹配PSP_NS。通过检查CONTROL.SPSEL字段可判断线程模式中是否启用了PSP。
Stop Forwarding Errors, Start Designing Them4 months agohttps://fast.github.io/blog/stop-forwarding-errors-start-designing-them/当前错误处理实践往往只是转发错误而不保留有意义的上下文。Rust的`std::error::Error`特性存在缺陷,它假设错误是线性链式的,排除了多源错误的场景。异步代码中的回溯信息通常无用且昂贵,无法展示错误的逻辑路径。`Provide/Request` API引入了不可预测性和复杂性,却未带来明确收益。`thiserror`按错误来源而非可操作的响应分类错误,导致恢复逻辑不清晰。`anyhow`过于便利,常导致错过添加上下文的机会。错误设计应兼顾两类受众:机器(用于自动恢复)和人类(用于调试)。对机器而言,错误应是扁平化、可操作且基于类型的,以支持明确决策。对人类而言,错误应能自动且符合人体工学地捕获丰富上下文。`exn`库通过类型系统在模块边界强制上下文,展示了更优方案。将机器可读错误与人类可读上下文结合,可实现两全其美。错误本质是沟通工具,应精心设计而非简单转发。
Show HN: Live VNC for web agents – debugging native captcha on Cloud Run4 months agohttps://www.rtrvr.ai/blog/live-vnc-takeover-serverless-chrome实时VNC查看和接管临时云浏览器功能,显著提升网页代理的调试效率。网页代理故障源于网络分布式系统特性,而不仅是界面问题。基于DOM的原生自动化技术,无需依赖截图/视觉识别及CDP工具(如Playwright/Puppeteer)。实时VNC可有效调试验证码破解、iframe定位等实时性问题。受限于Cloud Run架构,需采用基于中继的VNC方案以避免粘滞路由问题。该方案通过运行器、中继服务和签名配对令牌实现安全可扩展的VNC访问。极简显示栈(Xvfb + x11vnc + xsetroot)替代了Fluxbox等重型方案。安全模型确保:无公开VNC端口、令牌短期有效、角色严格隔离。实时VNC观测能力优化了验证码、iframe、Shadow DOM及并行执行的调试。性能指标显示中继服务稳定,但网页代理运行器存在部分错误。带宽是扩展VNC会话规模的核心制约因素。经验总结:避免在运行器集成VNC,并需规避Fluxbox等不必要的复杂度。
Investigating and fixing a nasty clone bug5 months agohttps://kobzol.github.io/rust/2025/12/30/investigating-and-fixing-a-nasty-clone-...作者在bors GitHub合并机器人中发现了一个bug:HTTP PATCH请求在重试时有时会出现空请求体。经排查发现是octocrab库的重试机制问题,该机制对请求体进行了浅克隆而非深拷贝。解决方案是修改OctoBody结构体,使其包含一个缓冲副本用于重试,确保重试时请求体不为空。作者还探讨了像Claude这样的LLM模型是否能更早发现该bug,但结果好坏参半。该修复已合并到octocrab库中,并在0.49.1版本发布。
Finding and Fixing Ghostty's Largest Memory Leak4 months agohttps://mitchellh.com/writing/ghostty-memory-leak-fixGhostty 消耗了异常高的内存,有报告显示运行10天后内存占用高达37GB。该内存泄漏问题自Ghostty 1.0版本就存在,但随着Claude Code等CLI应用的流行变得明显。Ghostty使用PageList数据结构管理终端内存,通过mmap分配标准和非标准内存页。滚动修剪优化方案错误地将最旧页面复用为最新页面,且未调整非标准页面大小,导致内存泄漏。修复方案规定在滚动修剪时绝不复用非标准页面,确保内存正确释放。新增了macOS虚拟内存标签功能,用于追踪和调试PageList相关的内存分配。Ghostty采用多种泄漏检测手段,包括调试版本、单元测试、valgrind CI测试和macOS Instruments工具。社区提供的详细诊断和复现努力对定位和修复泄漏起到了关键作用。
Launch a Debugging Terminal into GitHub Actions4 months agohttps://blog.gripdev.xyz/2026/01/10/actions-terminal-on-failure-for-debugging/WebRTC被用于创建GitHub Actions的调试终端,在构建失败时允许交互式访问。该方案通过WebRTCPeer-to-Peer(P2P)连接避免高额数据传输成本。使用OAuth进行浏览器认证,OIDC令牌进行Actions虚拟机身份验证,确保安全性。信令服务器促成终端双方(Actions虚拟机与用户浏览器)的对接,但不处理终端数据。终端会话通过WebRTC数据通道流式传输,浏览器端使用Ghostty库显示终端界面。额外安全措施包括采用一次性密码(OTP)进行节点验证,该机制独立于信令服务器。信令服务器部署在Railway.com平台,利用其按量付费模式降低成本,并具备空闲自动休眠等功能。
Finding and Fixing a 50k Goroutine Leak That Nearly Killed Production4 months agohttps://skoredin.pro/blog/golang/goroutine-leak-debugging某生产环境的API服务出现严重goroutine泄漏问题,六周内从1,200个goroutine激增至50,847个,导致内存占用飙升至47GB,接口响应时间延迟达32秒。泄漏根源在于WebSocket通知系统中存在三个关键缺陷:未调用context的cancel()方法、未停止定时器ticker、未关闭通信通道channel。Uber的LeakProf工具在定位泄漏过程中发挥关键作用,发现已断开的WebSocket连接对应的goroutine未被清理。修复方案包括:规范资源回收流程——执行context的cancel()、停止ticker、关闭channel,并建立连接监测机制及时清理失效连接。采用分阶段恢复策略:先实施紧急止血措施,再运行清理脚本消除现存泄漏,最后部署新型监控防止复发。新增Prometheus监控指标,包括goroutine数量、WebSocket订阅数、活跃连接数等核心指标告警体系。强化测试方案:增加泄漏检测测试、针对泄漏的负载测试、支持goroutine追踪的基准测试。核心经验教训:必须明确goroutine退出机制、规范资源回收流程、监控goroutine数量变化、开展泄漏专项测试。该故障导致性能劣化、客户投诉、人力成本、额外AWS支出及商誉损失等多维损失。现行预防机制包括:提交前钩子检测遗漏的ticker.Stop()调用,测试中强制使用goleak进行泄漏检测。
The fix for a segfault that never shipped4 months agohttps://www.recall.ai/blog/the-fix-for-a-segfault-that-never-shippedRecall.ai每月处理数百万小时的会议音频,将不同格式统一标准化处理该公司在一个古老的AAC编码器中遭遇罕见段错误,导致每3600万次会议机器人实例中约有1次数据丢失问题根源是VisualOn AAC编码器中存在定点数学运算缺陷,该补丁虽在十多年前就已开发但从未向下游分发为诊断问题,Recall.ai开发了名为'垃圾车'的Rust二进制工具,用于从临时EC2实例抓取核心转储并上传至S3分析显示崩溃发生在`voAACEnc_pow2_xy`函数中,因定点算术错误导致`avgEn < minEn`而引发越界访问团队通过强制`avgEn >= minEn`实现临时修复,最终采用现代AAC编码器替代陈旧版本以彻底杜绝此类崩溃