调试之剑:从堆里抢救丢失的博客文章

Claude Managed Agents:生产级智能体运行时架构解析 智能体(Agent)作为大模型落地的关键范式,其核心挑战在于状态管理、安全执行与可观测性。传统方案将状态耦合于模型上下文,导致上下文溢出、调试困难与安全风险;而现代生产级运行时通过‘会话即事件日志’实现状态持久化与可追溯,依托无状态执行器(Harness)解耦计算逻辑,结合一次性沙箱(Sandbox)落实最小权限与牛群化运维。这类架构设计直指AI工程化痛点,支撑跨工具、长周期、高合规的业务场景,如客户服务自动化、销售线索分发与法律文档分析等。Anthropic Managed Agents 正是这一技术路径 阅读详情

很多使用计算机的人都曾经遇到过丢失数据的尴尬。记得 我读大学时,很多文字编辑软件还没有自动存盘功能,而且寝室里偶尔会因为用电超过负荷而跳闸停电。每次断电时,如果赶上有人在电脑前写代码或者编辑文字, 那么常常听到那位先生狠狠一跺脚(或者使劲一拍大腿),然后痛叫一声“唉呀,还有东西没存盘呢!”。因为输入的内容是临时保存在内存中的,如果忘记存盘或 者在存盘前电脑死机或者突然断电,那么辛辛苦苦输入的东西就会化为乌有。

随着常用办公软件加入自动保存功能,因为忘记存盘而丢 失数据的“悲剧”少了。但是偶尔也还会发生,因为自动存盘机制也有失灵的时候。最近一些年,基于网络的写作方式日益流行,比如写博客,在论坛上发帖子,或 者点评别人的文章,对新闻发表看法等。这些写作很多是在浏览器里进行的,文字输入到不同形式的编辑框里,写作完毕时,发送到网站的服务器端保存。由于这种 嵌入在网页中的编辑功能常常是没有自动存盘机制的,编辑内容一直临时保存在浏览器程序的内存空间中,如果编辑内容没有发送到服务器端,那么编辑的内容就可 能丢失。笔者前不久就遇到了一次。


假日写作忙

故事发生在2010年的元旦假日,因为年底一个月很忙 碌,所以久未写博客了,趁着元旦放假,略有空闲,于是想写点东西。一来练练手,免得本来就不熟练的文笔变得更加生疏;二来与网友们交流一下,免得朋友也生 疏了。

于是上网,打开网页,准备写个短文。写什么呢?平时写 的一般都是技术,不适合假日的气氛,于是想写点技术之外的闲话。放假前去了次闵行老街,就写这个吧,怀怀旧。写文章不是件简单的活,很多时候的确像赵本山 说的那样,半天憋不出俩字。于是乎,就一篇简简单单的《重访闵行老街》(http://advdbg.com/blogs/advdbg_system /articles/3412.aspx),前前后后也用了几个小时。当然中间也有一些停顿,有时陪女儿玩一会,有时喝杯茶,这样到中午时,基本写好了, 检查一遍就可以发出去了。但中饭时间到了,女儿强烈要求我煮意大利面给她吃,于是只好把写了大半的文章搁置下来。

厨房里忙活了一阵后,意大利面做好了。“老爸,意大利 面煮的很棒”,女儿怪腔怪调的表扬给了我最好的奖励。吃过午饭,又想起写文章的事,看了一遍,改掉几个错别字,部分语句润色一下,自我感觉可以了,于是点 击“发送”按钮,准备发布出去。


大意失博文

鼠标点下去后我就后悔了,或许被女儿刚才的表扬冲昏了 头脑,我这个发送动作显然有些草率。应该在发送前先保存一下呀!虽然网页里没有保存功能,但是可以把内容Copy-Paste到记事本里保存到本地一份 的。因为博客是在网页上写的,没有自动保存,如果发送失败,后果可能很严重。

导致发送失败的原因有很多,可能因为与服务器端的登录 会话超时,可能因为服务器端网站服务存在故障,可能因为网络连接有问题。但是这时已经没有机会取消了,虽然还可以看到编辑的文字,可以选中,但是菜单中的 Copy命令已经不管用了。

接下来看到的是浏览器与服务器艰难对话的过程,进度条 缓慢的向前移动,状态条上提示“Connecting with server(正在连接服务器)”。这时我预感到事情不妙,这篇博客可能要白写,抱着无 可奈何的心情又等了几秒钟后,问题真的出现了,浏览器切换到一个丑陋的错误提示页面,标题条上显示“Cannot find server(无法连接服务 器)” (见图1),我一拍桌子,无语。

打开另一个浏览器,试图访问服务器,真的连不上,后来 证明,服务器确实宕掉了,具体时间没有仔细查过,但肯定是在我写文章或者吃午饭的过程中,因为开始写这篇博客时还是连得上的。

根据经验,有时利用浏览器的回退功能还可以退回到刚才 编辑的页面,救回所写的内容。于是点击Back按钮,但是浏览器并没有老老实实的回退到刚才的编辑页面,而是再次试图连接服务器,连接失败,又显 示 “Cannot find server”,原因是前一个页面上的“自动脚本”会触发连接服务器的动作,糟糕的软件!

向前又向后来回了几次,仍无济于事,我意识到,刚才几 个小时的工夫要白费了。这时老婆从书桌路过,听说我刚才写的东西丢了后,她哈哈大笑,“你也会犯这种错误的啊,我还以为只有我们这些人才犯这种错误哪,呵 呵呵!”

是啊,这个错误是够低级的,要么应该用更好一点的工具 来写,要么该先保存一下……但是现在说这个都没用了。


上调试器!

怎么办,重写一遍?不可接受。放弃拉倒?不可接受。想 了一会后,我决定用调试器来寻找刚才写的文章。上调试器,对上调试器。因为文章应该还在内存里,在内存里,就应该可以用调试器找得到,找得到就可以读出 来,读出来了就可以找办法恢复成可读的形式。

图1  向服务器端发送博客文章时失败

图1 向服务器端发送博客文章时失败

启动WinDBG,点击 File→ Attach to Process,然后选择浏览器进程(iexplore.exe)。因为系统中常常有多个浏览器程序的运行实例,因此首 先要确认附加上的进程就是刚才写博客的那个进程,这可以通过尝试切换到刚才的浏览器窗口来判断,如果切换不过去,那就对了,证明这个进程已经被中断到调试 中。

执行“lm”命令,可以看到进程中有几十个模块;执行 “~”命令列一下线程,可以看到进程中有四十几个线程;用!heap命令列一下堆,有44个。要找的文章应该保存在当前进程的内存空间中,因此我们重点关 心的是内存。在32位系统中,一个进程的内存空间有4GB大小,通常低2GB是用户态空间,给用户态代码使用,高2GB是内核空间,给系统代码使用。执行 “!address”命令可以列出用户态空间中的所有区域:

技术4-2

在列出每个区域后,!address命令还会给出一个 非常友好的统计报告,如图2所示。

图2  !address命令给出的内存统计报告

图2 !address命令给出的内存统计报告

根据经验,用于保存编辑文字的内存块应该是从堆上动态 分配出来的。根据图2,当前进程里堆空间有116756KB大小,也就是100多MB,1亿多字节。也就是说,我们要在一亿多字节的堆中寻找几千个字节的 博客文章。


搜索

看来我们要在1亿多字节的空间中寻找几千个字节的文 章。如果用笨办法一个字节一个字节地找,那么真有点像大海捞针。茫茫1亿多字节的堆空间,在哪里找自己写的文章呢?

当然要依靠自动搜索,好在WinDBG已经为我们准备 好了强大的内存搜索命令,可以在任意指定的空间范围内搜索不同类型的数据。

搜索吧!就从当前进程用户态空间的较低地址开始搜,找 文章里的一句有特色的话:

0:045> s -u 10000 L80000 ” 当年在交大”

前几次尝试,什么都没找到,看来要扩大搜索范围:

0:045> s -u 10000 L8000000 ” 当年在交大”

延迟一刹那后,刷刷出来很多结果(见图3)。搜到了! 这让人很高兴,说明数据还在内存里。

 

图3  搜索博客文章

图3 搜索博客文章

但是仔细看看搜索的结果后,又有点怀疑。因为 WinDBG不支持中文显示,所以有点不确认上面搜到的信息。为了确认,执行“r”命令,观察ESP寄存器的值:

0:043> r esp

esp=02c9ffcc

然后使用内存编辑命令在栈上输入上面的中文字符(见图 4),再用内存观察命令查看,证实上面搜索到的结果是对的,5f53就是“当”字的编码, 4ea4 5927 就是“交大”。

 

图4  编辑和观察栈

图4 编辑和观察栈

图3中的搜索结果告诉我们搜到很多处,看来文章被复制 了很多次,可能是不同阶段的处理函数分别作了拷贝。

使用哪一处的数据呢?当然希望是完整的,再搜索一下文 章末尾的一个特征字:

s -u 10000 L8000000 ”曙光”

也找到很多份(见图5),看来只要用对了工具和方法, 刚刚苦苦寻找不可见的数据现在可以变得俯拾即是。

 

图5  搜索博客文章末尾的特征字符

图5 搜索博客文章末尾的特征字符

考虑到文章的长度在几千个字节大小,因此找图3和图5 两个结果中差值大约为几KB的地址,观察一下属性:

0:045> !address 0728988a

06fa0000 : 07288000 - 00005000

Type     00020000 MEM_PRIVATE

Protect  00000004 PAGE_READWRITE

State    00001000 MEM_COMMIT

Usage    RegionUsageHeap

Handle   00150000

 

在堆上,靠谱!


 

保存到文件

接下来的目标是将数据从内存堆保存到文 件,WinDBG已经帮我们准备好了一条命令:

0:045> .writemem c:/dumps/blog.txt 07288600  L2000

Writing 2000 bytes….

写好了,用记事本打开看一下(见图6):

 

图6  观察WinDBG保存出来的文章

图6 观察WinDBG保存出来的文章

乱码,应该高兴还是失望?看到这种情况,老实说,我当 时挺高兴的,根据经验这很像是中文,Unicode编码的,只不过没有按中文显示罢了。

怎么才能让编辑器程序按中文显示呢?方法很简单,对于 文本文件,只要在文件开头加入Unicode文件的两个标识字符就行了,也就是0xFF FE。

怎么加入这两个字符呢?使用任何二进制编辑工具都可 以,手头最方便的就是VC6。右键选择使用VC6打开,文件开头刚好有几个空闲的字符(<P>之类),将其修改为0xFF FE后,另存为 blog_u.txt。再打开观看,便可以看到亲切的中文字符了(见图7)。

 

图7  加入Unicode标识后再观察

图7 加入Unicode标识后再观察

哦,成功了!其实刚才加入0xFF FE那一步也可以 在调试器里使用内存编辑命令来完成,编辑好再保存成文件。


 

回味

费了一番周折,丢失的文章终于又找到了。待服务器恢复 正常后,整理一下,一篇失而复得的怀旧博文便发布出去了。回顾一下,首先多亏自己没有轻易放弃,一旦把浏览器程序关掉退出,那么内存空间就被销毁了,再想 找到文章就更难了。另外,要感谢以调试器为核心的调试技术,正如我在很多地方都曾经说到的,调试技术绝对不仅仅是用来找BUG的,它的用途还有很多很多, 在以后的文章中我们会不断给大家介绍。

Agent Runtime 正在成为 AI 时代的操作系统层 Agent runtime 不是简单的执行环境,而是大模型应用落地的基础设施底座——它抽象状态管理、隔离执行、保障可观测性,本质是将松散的 prompt 工程升级为可运维、可审计、可扩展的软件系统。随着 Claude Managed Agents、AWS Bedrock AgentCore 等托管服务兴起,'session as event log' 和 'sandbox as cattle' 已成核心范式,推动 runtime 层走向标准化与商品化。这一演进直接决定 AI 应用能否承载真实业务流(如客服工 阅读详情

相关推荐

Qwen3.6-Plus:面向真实开发的编程Agent实战指南

编程Agent 是指能理解任务目标、自主规划步骤、调用工具执行并闭环验证的智能体,其核心在于将自然语言指令转化为终端可执行的工程动作。它不同于传统代码补全或对话模型,依赖对 shell 命令语义、Git 工作流、CI/CD 环境及多文件代码库的深度理解与稳定操作能力。技术价值体现在显著压缩开发者在环境调试、文档查阅、错误定位与重复命令拼接上的时间开销,尤其适用于自动化报表生成、开源Bug修复、微服务迁移等需跨工具链协作的场景。Qwen3.6-Plus 通过 Terminal-Bench 2.0 和 SWE-

529

(转)调试之剑:从堆里抢救丢失的博客文章

文/张银奎 很多使用计算机的人都曾经遇到过丢失数据的尴尬。记得我读大学时,很多文字编辑软件还没有自动存盘功能,而且寝室里偶尔会因为用电超过负荷而跳闸停电。每次断电时,如果赶上有人在电脑前写代码或者编辑文字,那么常常听到那位先生狠狠一跺脚(或者使劲一拍大腿),然后痛叫一声“唉呀,还有东西没存盘呢!”。因为输入的内容是临时保存在内存中的,如果忘记存盘或者在存盘前电脑死机或者突然断电,那么辛

followingturing 追随图灵的路上... 1834

从软体机器人到鞋垫分析:Abaqus超弹性材料(Ogden模型)仿真配置全流程

本文详细介绍了Abaqus中Ogden模型在超弹性材料仿真中的应用全流程,涵盖从实验数据导入、参数拟合到模型构建与求解优化的关键步骤。特别针对鞋垫分析等生物力学场景,提供了单元选择、接触设置和并行计算等实用技巧,帮助工程师实现高精度仿真分析。

weixin_42525385的博客 399

格蠹汇编 第一章 从堆里抢救丢失的博客

选择dump好的文件 转载于:https://blog.51cto.com/13751543/2315781

weixin_34195364的博客 283

构建可编程记忆系统:OpenClaw-SuperMemory本地部署与智能知识管理实战

在信息过载的时代,高效的知识管理与智能检索成为技术从业者的核心需求。向量数据库与嵌入模型技术通过将文本转化为高维向量,实现了基于语义相似度的智能搜索,突破了传统关键词匹配的局限。这项技术的核心价值在于将静态存储的信息转化为可动态查询和计算的知识资产,极大地提升了信息调用的准确性和效率。其应用场景广泛,从个人笔记管理、对话历史归档到企业知识库构建都能发挥关键作用。本文聚焦于开源项目OpenClaw-SuperMemory,它正是基于这一技术栈,通过本地化部署实现了可编程记忆系统的构建。项目集成了ChromaD

weixin_42525482的博客 319

滤波算法-呼吸心跳信号检测方法(四)

呼吸心跳信号检测系列文章:信号滤波处理

yjh_2019的博客 6269

WinDbg数据搜索技巧 ---《格蠹汇编-从堆里抢救丢失的博客》

原文中作者是从堆里面寻找丢失的博客文章,在这里我模拟的环境是从gvim编辑器里面寻找一段文字的地址 强大的!address命令 !address -summary可以显示进程空间中内存使用情况的摘要 0:003> !address -summary Mapping file section regions... Ma...

weixin_33860722的博客 322

STM32 FOC半周期控制延时分析与硬件同步配置

在电机矢量控制(FOC)系统中,数字控制延时是影响电流环带宽、观测器收敛性与系统稳定性的核心瓶颈。其本质源于PWM更新、ADC采样与计算执行之间的时序错配,典型表现为1.5个PWM周期的相位滞后,导致滑模观测器(SMO)失效或高速振荡。通过零阶保持(ZOH)建模可量化该延时对系统相频特性的影响,并揭示其等效为0.5u(t)+0.5u(t−1)的平滑控制律。工程上突破的关键在于重构外设协同机制——以高级定时器重复计数器(RCR0)驱动中心对齐PWM的半周期更新事件,使控制量在0.5T_PWM内生效,同步触发多

flink9streamer的博客 1131

调试之剑

跟踪调试:GDB gdb 是由 GNU 软件系统社区提供的调试器,同 gcc 配套组成了一套完整的开发环境,可移植性很好,支持非常多的体系结构并被移植到各种系统中(包括各种类 Unix 系统与 Windows 系统里的 MinGW 和 Cygwin )。此外,除了 C 语言之外,gcc/gdb 还支持包括 C++、Objective-C、Ada 和 Pascal 等各种语言后端的编译和调试。 gc

蔡曜镫专栏 2337

SAP SD跨公司销售IDOC自动记账配置实战指南

本文详细介绍了SAP SD模块中跨公司销售IDOC自动记账的配置实战指南。通过IDOC技术实现集团企业间交易的自动化处理,显著提升财务效率和准确性。文章涵盖前置配置、RFC连接、合作伙伴参数设置及财务科目分配等关键步骤,并提供了常见错误排查和性能优化建议,帮助用户快速掌握这一高效业务流程。

weixin_29284885的博客 769

SDRAM控制器——添加读写FIFO

用FIFO实现数据缓存

H19981118的博客 2627

调试:格蠹汇编笔记 第一章,从堆里抢救丢失的博客

作者 是写过《软件调试》的张银奎,以例子的形式讲解调试的经验和知识,文字很鲜活比较有趣。 第一章,从堆里抢救丢失的博客 其实就是用调试器从内存里找到文字,搜索时搜索文字的头尾确定范围,再写入文件即可 0:035> s -u 10000 L8000000 "作者 是写过"01d29ec0 4f5c 8005 0020 662f 5199 8fc7 300a 8f6f \O.. ...

weixin_30786657的博客 203

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

从堆里找回“丢失”的代码

原总结调试windbg转储 前言 前一阵子,使用小乌龟(TortoiseGit)提交代码的时候,错误的 Revert 了部分代码,本文记录了找回这部分代码的过程。文章标题致敬张银奎老师《格蠹汇编》的第一章 —— 从堆里抢救丢失的博客。 说明: 本文的截图都是我用新建的示例工程截取的。 缘起 最近,程序运行的时候,执行某个功能会崩溃,根据经验猜测,应该是序列化,...

529

Prompt进阶2:LangGPT(构建高性能Prompt策略和技巧)--最佳实践指南

Prompt进阶2:LangGPT(构建高性能Prompt策略和技巧)--最佳实践指南

丨汀、的博客 2650

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

WinDbg数据搜索技巧 --- 《格蠹汇编-从堆里抢救丢失的博客》

原文中作者是从堆里面寻找丢失的博客文章,在这里我模拟的环境是从gvim编辑器里面寻找一段文字的地址 强大的!address命令 !address -summary可以显示进程空间中内存使用情况的摘要 0:003> !address -summary Mapping file section regions.....

betteroneisme的专栏 323

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

小乌龟同步主支代码_从堆里找回“丢失”的代码

前言 前一阵子,使用小乌龟(TortoiseGit)提交代码的时候,错误的 Revert 了部分代码,本文记录了找回这部分代码的过程。文章标题致敬张银奎老师《格蠹汇编》的第一章 —— 从堆里抢救丢失的博客。说明: 本文的截图都是我用新建的示例工程截取的。缘起 最近,程序运行的时候,执行某个功能会崩溃,根据经验猜测,应该是序列化,反序列化的问题。由于手里没有关键的 pdb,调试起来比较费劲,而且项目...

weixin_39625098的博客 383

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

vs一直出现上次成功的代码_从堆里找回“丢失”的代码

前言 前一阵子,使用小乌龟(TortoiseGit)提交代码的时候,错误的 Revert 了部分代码,本文记录了找回这部分代码的过程。文章标题致敬张银奎老师《格蠹汇编》的第一章 —— 从堆里抢救丢失的博客。说明: 本文的截图都是我用新建的示例工程截取的。缘起 最近,程序运行的时候,执行某个功能会崩溃,根据经验猜测,应该是序列化,反序列化的问题。由于手里没有关键的 pdb,调试起来比较费劲,而且项目...

weixin_39816260的博客 1674

文章集锦-值得反复修订的文章

GDB相关:gtk4+gdb线程观察-线程卡牢为哪般-优快云博客

hb_zxl的专栏 324

《格蠹汇编》调试笔记

以前也就是把Windbg作为一个调试所写驱动的调试器。只进行源码级的调试,运用的比较浅显。 最近研读张银奎老师的《软件调试》获益良多,刚好与之配套的《格蠹汇编》提供了老师大量的调试经验以及实验环境。不拿来好好实践一番简直浪费。 0X01调试笔记之侦查广告插件 俗话说:工欲善其事,必先利其器。对于调试领域来说,更是如此。我们不但要在自己的计算机中安装有WinDbg,还应当使用JIT调试的...

weixin_30682127的博客 292

以后 没准会用到 先留着保存学习

调试之剑:从堆里抢救丢失的博客文章作者: wuzhimin分类:坊间人语  阅读:1,915 次添加评论文/张银奎 很多使用计算机的人都曾经遇到过丢失数据的尴尬。记得我读大学时,很多文字编辑软件还没有自动存盘功能,而且寝室里偶尔会因为用电超过负荷而跳闸停电。每次断电时,如果赶上有人在电脑前写代码或者编辑文字,那么常常听到那位先生狠狠一跺脚(或者使劲一拍大腿)

vluobin的专栏 639

国内最硬核的.NET技术博客是如何炼成的

.NET技术生态正经历从Windows企业级应用向云原生、跨平台、高性能服务的关键转型。理解其底层运行时机制(如Native AOT编译、HttpClientFactory生命周期)、掌握产线级调试能力(如dotnet-dump分析、内存泄漏定位),已成为中高级工程师突破性能与稳定性瓶颈的核心竞争力。这类深度实践知识既不在官方文档的显性路径中,也难被通用教程覆盖,而高度依赖真实项目中的问题沉淀与可复现验证。本文聚焦一个持续12年深耕.NET一线的标杆技术博客,解析其如何以‘做人→技术人员→程序员’三层能力模

440
上一篇: SOCKS: A protocol for TCP proxy across firewalls[SOCKS4]
下一篇: VirtualBox和VMware镜像文件互转
winterlc
博客等级 码龄21年 43粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值