<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Debug on Tony Bai</title><link>https://tonybai.com/tags/debug/</link><description>Recent content in Debug on Tony Bai</description><generator>Hugo</generator><language>zh-cn</language><copyright>2004-2026 Tony Bai. 版权所有.</copyright><lastBuildDate>Tue, 29 Jul 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://tonybai.com/tags/debug/index.xml" rel="self" type="application/rss+xml"/><item><title>slog 如何同时输出到控制台和文件？MultiHandler 提案或将终结重复造轮子</title><link>https://tonybai.com/2025/07/29/slog-multihandler/</link><pubDate>Tue, 29 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/29/slog-multihandler/</guid><description>本文永久链接 – https://tonybai.com/2025/07/29/slog-multihandler 大家好，我是Tony Bai。 自 log/slog 在 Go 1.21 中引入以来，一个常见的需求始终困扰着开发者：如何将日志同时发送到多个目的地，并为每个目的地设置不同的日志级别？尽管社区已涌现出 samber/slog-multi 等优秀的三方库，但关于“标准库是否应原生支持”...</description></item><item><title>Go pprof 迎来重大革新：v2 提案详解，告别默认注册，拥抱飞行记录器</title><link>https://tonybai.com/2025/07/11/net-http-pprof-v2/</link><pubDate>Fri, 11 Jul 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/07/11/net-http-pprof-v2/</guid><description>本文永久链接 – https://tonybai.com/2025/07/11/net-http-pprof-v2 大家好，我是Tony Bai。 Go 语言的性能诊断利器 net/http/pprof 即将迎来一次意义深远的变革。一项编号为 **#74544** 的新提案建议引入一个全新的 net/http/pprof/v2 包，旨在从根本上解决当前版本因“默认注册”行为带来的安全隐患。该提案不...</description></item><item><title>Go 1.25链接器提速、执行文件瘦身：DWARF 5调试信息格式升级终落地</title><link>https://tonybai.com/2025/05/08/go-dwarf5/</link><pubDate>Thu, 08 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/08/go-dwarf5/</guid><description>Go 1.25链接器提速、执行文件瘦身：DWARF 5调试信息格式升级终落地 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进...</description></item><item><title>代码覆盖率新玩法：Russ Cox教你用差异化分析加速Go调试</title><link>https://tonybai.com/2025/05/07/debug-with-diff-cover/</link><pubDate>Wed, 07 May 2025 00:00:00 +0800</pubDate><guid>https://tonybai.com/2025/05/07/debug-with-diff-cover/</guid><description>代码覆盖率新玩法：Russ Cox教你用差异化分析加速Go调试 - Tony Bai =============== Tony Bai 一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * Go语言进阶课FAQ *...</description></item><item><title>一文搞懂如何在Go包中支持Hash-Based Bisect调试</title><link>https://tonybai.com/2024/11/24/how-to-support-hash-based-bisect-in-go-package/</link><pubDate>Sun, 24 Nov 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/11/24/how-to-support-hash-based-bisect-in-go-package/</guid><description>本文永久链接 – https://tonybai.com/2024/mm/dd/how-to-support-hash-based-bisect-in-go-package bisect是一个英文动词，意为“二分”或“分成两部分”。在数学和计算机科学中，通常指将一个区间或一个集合分成两个相等的部分。 对于程序员来说，最熟悉的bisect应用莫过于下面两个： * 算法中的二分查找(binary se...</description></item><item><title>slog正式版来了：Go日志记录新选择！</title><link>https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go/</link><pubDate>Fri, 01 Sep 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go/</guid><description>本文永久链接 – https://tonybai.com/2023/09/01/slog-a-new-choice-for-logging-in-go 在大约一年前，我就写下了《slog：Go官方版结构化日志包》一文，文中介绍了Go团队正在设计并计划在下一个Go版本中落地的Go官方结构化日志包：slog。但slog并未如预期在Go 1.20版本中落地，而是在golang.org/x/exp/slo...</description></item><item><title>聊聊Go语言的全局变量</title><link>https://tonybai.com/2023/03/22/global-variable-in-go/</link><pubDate>Wed, 22 Mar 2023 00:00:00 +0800</pubDate><guid>https://tonybai.com/2023/03/22/global-variable-in-go/</guid><description>本文永久链接 – https://tonybai.com/2023/03/22/global-variable-in-go &amp;gt; 注：上面篇首配图的底图由百度文心一格生成。 C语言是Go语言的先祖之一，Go继承了很多C语言的语法与表达方式，这其中就包含了**全局变量**，虽然Go在其语法规范中并没有直接给出全局变量的定义。但是已经入门Go的童鞋都知道，在Go中**包的导出变量(exported va...</description></item><item><title>记一次go panic问题的解决过程</title><link>https://tonybai.com/2019/04/04/notes-about-fixing-a-go-panic-problem/</link><pubDate>Thu, 04 Apr 2019 00:00:00 +0800</pubDate><guid>https://tonybai.com/2019/04/04/notes-about-fixing-a-go-panic-problem/</guid><description>一. Panic问题概述 ------------ 本周收到客户在bugclose上填写的一个issue：添加一个下发通道后，pushd程序panic并退出了！程序panic时输出的stacktrace信息摘录如下： panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: se...</description></item><item><title>再谈Docker容器单机网络：利用iptables trace和ebtables log</title><link>https://tonybai.com/2017/11/06/explain-docker-single-host-network-using-iptables-trace-and-ebtables-log/</link><pubDate>Mon, 06 Nov 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/11/06/explain-docker-single-host-network-using-iptables-trace-and-ebtables-log/</guid><description>这大半年一直在搞Kubernetes。每次搭建Kubernetes集群，或多或少都会被Kubernetes的“网络插件们”折腾折腾。因此，要说目前Kubernetes中最难搞的是什么？个人觉得莫过于其Pod网络了，至少也是最难搞的之一。除此之外，以Service和Pod为中心的Kubernetes架构还大量利用iptables规则来实现Service的反向代理和负载均衡，这又与Docker原生容器...</description></item><item><title>使用Golang开发微信公众平台-发送客服消息</title><link>https://tonybai.com/2014/12/30/send-custom-service-text-msg-for-wechat-public-platform-dev-in-golang/</link><pubDate>Tue, 30 Dec 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/12/30/send-custom-service-text-msg-for-wechat-public-platform-dev-in-golang/</guid><description>关注并使用过微信“飞常准”公众号的朋友们都有过如下体验：查询一个航班情况后，这个航班的checkin、登机、起降等信息都会在后续陆续异步发给你，这个服务就是通过微信公众平台的客服消息实现的。 微信公众平台开发文档中关于客服消息的解释如下：“当用户主动发消息给公众号的时候（包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功 事件、用户维权），微信将会把消息数据推送给开发者，开发者在一段...</description></item><item><title>使用Golang开发微信公众平台-接收加密消息</title><link>https://tonybai.com/2014/12/24/recv-encrypted-text-msg-for-wechat-public-platform-dev-in-golang/</link><pubDate>Wed, 24 Dec 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/12/24/recv-encrypted-text-msg-for-wechat-public-platform-dev-in-golang/</guid><description>在上一篇“接收文本消息”一文中，我们了解到：公众服务与微信服务器间的消息是“裸奔”的（即明文传输，通过抓包可以看到）。显然这对于一些对安 全性要求较高的大企业服务号来说，比如银行、证券、电信运营商或航空客服等是不能完全满足要求的。于是乎就有了微信服务器与公众服务间的数据加密 通信流程。 公众号管理员可以在公众号“开发者中心”选择是否采用&amp;#34;安全模式&amp;#34;(区别于明文模式)： 一旦选择了“安全模式”，微信...</description></item><item><title>使用Golang开发微信公众平台-接收文本消息</title><link>https://tonybai.com/2014/12/20/receive-text-for-wechat-public-platform-dev-in-golang/</link><pubDate>Sat, 20 Dec 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/12/20/receive-text-for-wechat-public-platform-dev-in-golang/</guid><description>一旦接入验证成功，成为正式开发者，你可能会迫不及待地想通过手机微信发送一条&amp;#34;Hello, Wechat”到你的公众号服务器。不过上一篇的那个程序还无法处理手机提交的文本消息，本篇将介绍如何用Golang编写公众号程序来接收手机端发送的 文本消息以及回复响应消息。 根据微信公众平台开发文档中描述：“当普通微信用户向公众账号发消息时，微信服务器将POST消息的XML数据包到开发者填写的URL上”。我们...</description></item><item><title>Recommended C Style and Coding Standards中文版全文</title><link>https://tonybai.com/2013/11/26/the-full-text-of-recommended-c-style-and-coding-standards/</link><pubDate>Tue, 26 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/26/the-full-text-of-recommended-c-style-and-coding-standards/</guid><description>今天无意中打开了托管在Google Code上的“Recommended C Style and Coding Standards”翻译项目，忽感觉通过目录链接的方式查看译文缺少整体感，于是花了点时间将译文全文以single page的形式贴在博客里面，方便大家查看，也算是对该翻译内容的一个备份吧。 **C语言编码风格和标准** **0\. 摘要** 本文翻译自《Recommended C Sty...</description></item><item><title>跨过BUG查找的"最后一公里"</title><link>https://tonybai.com/2013/06/18/walk-through-the-last-mile-of-bugfix/</link><pubDate>Tue, 18 Jun 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/06/18/walk-through-the-last-mile-of-bugfix/</guid><description>_如果你看到一个C程序员在通宵熬夜神情紧张地对着电脑敲代码或阅读代码，多数只有两种可能：一是为了赶进度；二就是查找内存Bug。_                                                                                                                               _— 个人感悟_ ...</description></item><item><title>利用缓冲区溢出漏洞Hack应用</title><link>https://tonybai.com/2011/12/01/hack-app-by-buffer-overflow-leak/</link><pubDate>Thu, 01 Dec 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/12/01/hack-app-by-buffer-overflow-leak/</guid><description>我们在平时编码过程中很少考虑代码的安全性(security)，与正确性、高性能和可移植性相比，安全性似乎总被忽略。昨天从安全性角度泛泛地Review了一下现有的代码，发现了不少具有安全隐患的地方。我们的程序员的确缺乏系统地有关安全编码方面的训练和实践，包括我在内，在安全编码方面也都是初级选手，脑子中对安全性编码缺乏系统的理解。 市面上讲解编码安全性方面的书籍也不是很多，在C编码安全性方面，CERT...</description></item><item><title>又遇字节序问题</title><link>https://tonybai.com/2011/01/21/encounter-byte-order-problem-again/</link><pubDate>Fri, 21 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/21/encounter-byte-order-problem-again/</guid><description>今天上午处理了一个线上产品的故障。分析来分析去，最后定位问题还是出在字节序转换的环节上。 其实测试组早在产品上线前就曾报告了这个问题，但是对应的开发人员并未对该问题进行深入地分析，而是有些草率地将该问题归结为客户端模拟器的实现不符合标准。因为这位同事比较资深，所以当时我也没有给予足够关注。 产品今天凌晨上线，9点左右业务量开始增大，这个问题立即就被我们在现场的运维人员发现，还好我们的系统是集群式的...</description></item><item><title>模拟器陷阱</title><link>https://tonybai.com/2009/08/22/the-trap-of-simulator/</link><pubDate>Sat, 22 Aug 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/08/22/the-trap-of-simulator/</guid><description>暑去清凉来，一场大雨让燥热一去不复返了，这让身体舒服了许多。本周四晚有一次产品升级操作，按惯例每次升级前的都会对产品做一次针对性的回归测试，这次也不例外，不过临近下班时测试组爆出一个莫名奇妙的问题。 测试人员在BUG说明中写到：产品在只运行某个流程A的情况是正常的，但是当流程A和流程B一起运行时，就会出XX异常情况。作为开发人员遇到类似的问题第一反映多为：这怎么可能呢？这个产品已经经过N轮测试并且...</description></item><item><title>分享一个Oracle OCI库的BUG</title><link>https://tonybai.com/2009/07/31/a-bug-of-oracle-oci-lib/</link><pubDate>Fri, 31 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/31/a-bug-of-oracle-oci-lib/</guid><description>上周测试组反馈在一台HP X86-64主机Solaris 10 for X86环境下部署的应用无法连接Oracle数据库，错误码ORA-12154。而另外一个产品的部署在这台主机上的应用却能正常连接到数据库。本周安排专人对该问题进行查找，在先后排除了用户环境设置、Oracle数据库服务端等问题后，我们最终把目光集中在了Oracle客户端的OCI库上。 定位过程如下： 1、SQLPLUS可以访问数据...</description></item><item><title>周末“捉虫”记</title><link>https://tonybai.com/2009/07/18/debugging-notes-at-weekends/</link><pubDate>Sat, 18 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/18/debugging-notes-at-weekends/</guid><description>周六，对于上班族来说是多么好的日子，能在家里享受自由的无拘无束的生活而且不用担心第二天的工作，应该说是一周中最没有压力的一天。六点半起床，慢慢喝下一杯225ml左右的凉白开（保健医生说20-25摄氏度的凉白开比较适宜作为起床后的第一杯水），套上运动短裤和上衣，打开MP3播放器，塞上耳机，出门在园区内慢跑。昨晚下了一场雨，所以园区早上的空气很好。耳畔酷玩乐队的“Viva La Vida”让我跑起来很...</description></item><item><title>也谈软件调试</title><link>https://tonybai.com/2009/03/22/also-talk-about-debugging-software/</link><pubDate>Sun, 22 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/22/also-talk-about-debugging-software/</guid><description>每年二月末到三月初，公司都会安排一批实习生到各个部门实习。虽说去年经济危机了，但公司的实习生数量似乎并没有减少。起码我们部门&amp;#34;新同事&amp;#34;的数量基本与去年持平。按惯例，每位新同事都会有一名导师，与此同时各个部门还会根据自身的业务特点对这批学生进行有针对性的集中培训和交流。比起我入司那会儿，现在的实习生已经算是幸福多了。我那会儿实习生人数少，部门没有安排什么培训，完全靠导师安排自己努力学习。此次培训的内...</description></item><item><title>发现一隐藏多年的Bug</title><link>https://tonybai.com/2008/09/06/found-a-bug-that-is-hidden-several-years/</link><pubDate>Sat, 06 Sep 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/09/06/found-a-bug-that-is-hidden-several-years/</guid><description>C语言程序员在平时工作中，到底如何获取成就感呢？我几乎可以肯定的是：找到一个隐藏已久，多年无人发现的大Bug肯定可以归属到C程序员成就感的范畴中。与操作系统斗、与编译器斗、与内存斗，其乐无穷吗^\_^。 今天测试人员在进行平台迁移测试时发现一个致命的问题，导致系统不能正常工作。问题提到我这，为了不耽误测试进度，马上丢下手头的工作开始问题的查找，经过GDB多次跟踪调试，终于发现了一隐藏多年的问题，至...</description></item><item><title>都是病毒惹得祸</title><link>https://tonybai.com/2008/01/18/a-disaster-caused-by-virus/</link><pubDate>Fri, 18 Jan 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/01/18/a-disaster-caused-by-virus/</guid><description>上周日下午，接到同事的一个寻求支持的电话，原来是部门以前给中国联通做的一个运行在PC服务器上的程序在每天凌晨出现&amp;#39;挂死&amp;#39;情况，导致程序运行中断，问题连续几天复现。程序是老程序，在不下十多个省运行，一直都很稳定。通过联通的人发过来的截图，很难定位问题所在，所以只能打车到了联通机房现场查看了。 还是那句话，维护别人的又是自己不熟悉的程序那真是痛苦的，好久都不在Windows上写程序、调程序了，API都...</description></item><item><title>一个很有意思的Bug</title><link>https://tonybai.com/2007/12/18/an-funny-bug/</link><pubDate>Tue, 18 Dec 2007 00:00:00 +0800</pubDate><guid>https://tonybai.com/2007/12/18/an-funny-bug/</guid><description>这个Bug源于昨天凌晨的一次版本升级失败。睡了一大觉后，下午回到公司，重现了这个问题并找到了原因，发现这的确是一个&amp;#39;很有意思的Bug&amp;#39;。 系统在从数据库初始化过程中遇到了问题：在读取数据库数据时，提示ORA-24373错误。手册上对ORA-24373的解释是这样的： ORA-24373: invalid length specified for statement Cause: The lengt...</description></item><item><title>'画蛇添足'招致的BUG</title><link>https://tonybai.com/2006/12/21/a-bug-caused-by-gild-the-lily/</link><pubDate>Thu, 21 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/21/a-bug-caused-by-gild-the-lily/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>疏忽大意招致恼人'BUG'</title><link>https://tonybai.com/2006/12/16/a-bug-caused-by-carelessness/</link><pubDate>Sat, 16 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/16/a-bug-caused-by-carelessness/</guid><description>河南项目实施，一波刚平一波又起呀！ 前天凌晨，河南又割入很多家SP，昨天早晨上班通过日志发现程序的一个子模块进程隔一段时间重启若干次，通常是每一批数据推过来，就有一次重启的过程，日志中没有打印出出错的标志，进程莫名奇妙的就宕掉了，查看程序环境也没有发现CORE文件或者.assert文件，在代码关键的退出区域加入打印日志，重启系统后仍然有同样的问题。郁闷呀，没办法，在家里搭建测试环境，模拟测试，测试...</description></item><item><title>一个'莫须有'的BUG</title><link>https://tonybai.com/2006/12/11/a-unwarranted-bug/</link><pubDate>Mon, 11 Dec 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/12/11/a-unwarranted-bug/</guid><description>上周三晚，河南’前线’反馈，河南移动手机用户投诉，经查是话单丢失。查看后的确有蹊跷，按照数据库中录入的原始话单数据来看，这几条记录的确是该生成话单的。之后又有同事发现出现丢话单的问题不仅仅这几条，而是一批一批的。没什么头绪，一夜无话，周四发现每天入库的可生成话单记录数居然比话单多出100万，也就是说我的程序居然少生成了100万话单，按照一条记录1角钱，这也是10万块呀，事情紧迫，问题查找的历程开始...</description></item><item><title>不完备库接口带来的隐患</title><link>https://tonybai.com/2006/09/09/hidden-danger-introduced-by-uncompleted-interface/</link><pubDate>Sat, 09 Sep 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/09/09/hidden-danger-introduced-by-uncompleted-interface/</guid><description>最近自己曾经辛苦耕耘过的两个项目同时上线，相关问题也就逐渐暴露出来。工作这两年多时间以后，使我有这样感觉：’测试永远都是不完备的’，有些问题只能在商用过程中发现，呵呵，明确一点啊我不是搞测试的:) 在解决问题过程中的感悟往往是最深刻的，解决问题的过程往往真的像是警察在侦破案件，往往一点点罪犯留下的蛛丝马迹就会让神探们找到线索，并迅速破案。 最近两天一直在一个bug上煎熬着，终于于昨天发现蛛丝马迹并...</description></item><item><title>线程函数参数引发的问题</title><link>https://tonybai.com/2006/06/07/a-problem-caused-by-thread-func-argument/</link><pubDate>Wed, 07 Jun 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/06/07/a-problem-caused-by-thread-func-argument/</guid><description>上午我们的一个实施组从现网发回来一封邮件，接到这种邮件一般都是报告问题的，果然不出所料，现场出现一个core，经过分析这是个由于线程函数参数存储位置不当造成的，从中我们可以总结出一些经验，以避免以后再犯。 我采用下面的一个例子来模拟问题的出现： #include #include #include typedef struct foo {         char c\[10\];        ...</description></item><item><title>开始'亡羊补牢'</title><link>https://tonybai.com/2006/04/12/begin-fix-before-lost-too-much/</link><pubDate>Wed, 12 Apr 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/04/12/begin-fix-before-lost-too-much/</guid><description>就在昨天，就在我们的项目要结项的时候，一个影响力不亚于’广岛原子弹’的bug出炉了，蒙蔽我近一个月的问题终于被澄清了，不过为时已晚，项目即将上线，如果想彻底地解决这个问题，需要对整个系统的实现架构作调整，目前能做的只是’亡羊补牢’了。 这里先简单的说一下问题的原因吧！熟悉Unix编程的人都知道有’共享内存映射’这回事儿，我们的问题恰巧就出在对’共享内存映射’的使用不当上。由于我们使用的底层库采用的...</description></item><item><title>用GDB调试多进程程序</title><link>https://tonybai.com/2006/01/08/debug-multiple-process-program-using-gdb/</link><pubDate>Sun, 08 Jan 2006 00:00:00 +0800</pubDate><guid>https://tonybai.com/2006/01/08/debug-multiple-process-program-using-gdb/</guid><description>有一段时间没有写技术方面的东西了^\_^。众所周知，GDB是Unix/Linux下调试程序的龙头老大，GDB功能强大，我们在平时多使用其一些最基本的功能，而且一般调试的都是单进程的程序。最近一个项目中的问题让我接触如何使用GDB调试多进程程序，更确切的是说调试调用fork的多进程程序。 使用GDB最好的文档就是其名为&amp;#39;Debugging with GDB&amp;#39;的参考手册。手册中有一小章节提到了如何调试...</description></item></channel></rss>