Lua DUMP TABLE/NUMBER/BOOLEAN/STRING Implement
-- 标准库函数局部化严格 GNU 下划线命名规范 localdebug_libdebuglocaldebug_getinfodebug_libanddebug_lib.getinfolocaldebug_getlocaldebug_libanddebug_lib.getlocallocaltype_functypelocaltostring_functostringlocalpairs_funcpairslocalstring_formatstring.formatlocalstring_repstring.replocalstring_gsubstring.gsublocalstring_bytestring.bytelocaltable_inserttable.insertlocaltable_concattable.concatlocaltable_sorttable.sortlocalmath_hugemath.hugelocalprint_funcprintlocalio_flushioandio.flush-- Dump 模块核心安全值序列化 -- 预计算转义映射localESCAPE_MAP{[]\\,[\\]\\\\,[\n]\\n,[\r]\\r,[\t]\\t,[\b]\\b,[\f]\\f}-- ASCII 清理保留 32-126localfunctionclean_comment_ascii(s)return(string_gsub(s,[^\32-\126], ))end-- 键排序规则localfunctioncompare_keys(a,b)localta,tbtype_func(a),type_func(b)iftanumberandtbnumberthenreturnabendiftanumberthenreturntrueendiftbnumberthenreturnfalseendiftastringandtbstringthenreturnabendreturntostring_func(a)tostring_func(b)end-- 【增强版】安全转字符串支持简洁模式用于堆栈跟踪localfunctionvalue_to_string(v,visited,current_indent,concise_mode)current_indentcurrent_indentor0localttype_func(v)-- 基础类型处理简洁模式复用iftnilthenreturnnilendiftbooleanthenreturnvandtrueorfalseendiftnumberthenifv~vthenreturn0/0endifvmath_hugethenreturnmath.hugeendifv-math_hugethenreturn-math.hugeendreturnstring_format(%.17g,v)endiftstringthenifconcise_modethenlocallimitedv:sub(1,100)localescapedstring_format(%q,limited)returnescaped..(v:len()100and...or)elselocalescapedstring_gsub(v,[%c\\],function(c)localescESCAPE_MAP[c]ifescthenreturnescendlocalbstring_byte(c)returnb32andstring_format(\\%03d,b)orcend)return..escaped..endend-- 简洁模式快速返回类型标识堆栈跟踪专用ifconcise_modetheniftfunctionthenreturnfunctionendiftuserdatathenreturnuserdataendiftthreadthenreturnthreadendifttablethenreturntableendreturn..t..end-- 深度模式完整序列化Dump 专用iftfunctionthenlocaladdr_partclean_comment_ascii(tostring_func(v))localdesc_parts{addr_part}localok,infopcall(debug_getinfo,v,Slnu)ifokandinfothentable_insert(desc_parts,(info.whatCandCorLua).. func)ifinfo.nameandinfo.name~?thentable_insert(desc_parts,name..clean_comment_ascii(info.name)..)endifinfo.nparamsthentable_insert(desc_parts,info.nparams..(info.isvarargandor).. params)endifinfo.short_srcandinfo.linedefinedandinfo.linedefined0thenlocalsrcclean_comment_ascii(info.short_src)ifinfo.linedefinedinfo.lastlinedefinedthentable_insert(desc_parts,string_format(file%s:%d,src,info.linedefined))elsetable_insert(desc_parts,string_format(file%s:%d-%d,src,info.linedefined,info.lastlinedefined))endendendreturnnil,table_concat(desc_parts, | )endiftuserdataortthreadthenreturnnil,clean_comment_ascii(tostring_func(v))endifttablethenifvisited[v]thenreturnnil,clean_comment_ascii(cycle ref - ..tostring_func(v))endvisited[v]truelocalnext_indentcurrent_indent4localfield_indentstring_rep( ,next_indent)localparts{}localtable_descclean_comment_ascii(tostring_func(v))table_insert(parts,field_indent..-- ..table_desc)localkeys{}forkinpairs_func(v)dotable_insert(keys,k)endtable_sort(keys,compare_keys)localkey_count#keysforidx,kinipairs(keys)dolocalis_last(idxkey_count)localkey_striftype_func(k)stringandk:match(^[a-zA-Z_][a-zA-Z0-9_]*$)thenkey_strkelselocalk_val,k_commentvalue_to_string(k,visited,next_indent)key_strk_commentand([..k_val.., -- ..k_comment..])or([..k_val..])endlocalval_str,val_commentvalue_to_string(v[k],visited,next_indent)locallinefield_indent..key_str.. ..val_strifnotis_lastthenlineline..,endifval_commentthenlineline.. -- ..val_commentendtable_insert(parts,line)endvisited[v]nillocalclose_indentstring_rep( ,current_indent)return{\n..table_concat(parts,\n)..\n..close_indent..},nilendreturnnil,clean_comment_ascii(unknown type ..t)end-- Dump 主函数localfunctiondump(value,name,base_indent)base_indentbase_indentor0localprefixstring_rep( ,base_indent)localresultprefixifname~niltheniftype_func(name)stringandname:match(^[a-zA-Z_][a-zA-Z0-9_]*$)thenresultresult..name.. elselocalname_val,name_commentvalue_to_string(name,{},base_indent)localname_partname_commentand([..name_val.., -- ..name_comment..])or([..name_val..])resultresult..name_part.. endendlocalval_str,val_commentvalue_to_string(value,{},base_indent)resultresult..val_strifval_commentthenresultresult.., -- ..val_commentendreturnresultend-- 堆栈跟踪模块复用 value_to_string 简洁模式 localfunctioncapture_stack_trace()localframes{at:}ifnotdebug_getinfothentable_insert(frames,#0: ERROR: debug library unavailable)returntable_concat(frames,\n)endlocallevel2localindex0localcaptured_anyfalsewhiletruedolocalsuccess,infopcall(debug_getinfo,level,nSlu)ifnotsuccessornotinfothenbreakend-- 函数名处理localfunc_nameinfo.nameandinfo.name~andinfo.nameor(info.whatmainandmainorinfo.whatCandCorinfo.whatLuaandanonymousorinfo.whator?)-- 文件/行号处理localfile_name(info.short_srcor?):gsub(^,)localline_num(info.currentlineandinfo.currentline0)andinfo.currentlineor?-- 参数捕获使用简洁模式序列化localparam_parts{}ifdebug_getlocalandinfo.nparamsandinfo.nparams0thenfori1,info.nparamsdolocalok,name,valuepcall(debug_getlocal,level,i)ifokandnameandname~thenlocalval_strvalue_to_string(value,nil,0,true)-- concise_modetruetable_insert(param_parts,string_format(%s%s,name,val_str))elsetable_insert(param_parts,string_format(param%d%s,i,okandunnamedorerror))endendendlocalparams_str#param_parts0andtable_concat(param_parts,, )ornil-- 构建帧字符串localframe_strparams_strandstring_format(#%d: %s (%s:%s) [%s],index,func_name,file_name,line_num,params_str)orstring_format(#%d: %s (%s:%s),index,func_name,file_name,line_num)table_insert(frames,frame_str)captured_anytruelevellevel1indexindex1endifnotcaptured_anythentable_insert(frames,#0: WARNING: stack captured but no frames retrieved)endreturntable_concat(frames,\n)endlocalfunctionprint_stack_trace()localtracecapture_stack_trace()iftraceand#trace0thenprint_func(trace)elseprint_func(at:\n#0: CRITICAL: capture_stack_trace returned empty string)endifio_flushthenio_flush()endend-- 模块导出 localsafe_dump_module{dumpdump,-- 深度转储多行带注释capture_stack_tracecapture_stack_trace,-- 堆栈捕获含简洁参数print_stack_traceprint_stack_trace,-- 直接打印堆栈-- 内部函数导出可选供高级使用value_to_stringvalue_to_string,-- 支持 concise_mode 参数}returnsafe_dump_module

相关新闻

aiAgent整体梳理

aiAgent整体梳理

LLM是有 Context 概念的,但这个 Context 只存在于“当前一次推理中”。 LLM没有跨请求的 Context(不会自己记住历史)。 请求开始 → 模型读取Context → 生成回答 → 请求结束 → Context消失 AI Agent 项目80%的复杂度,其实都在 …

2026/7/3 7:46:06 阅读更多 →
计算机网络基础(三)

计算机网络基础(三)

一、URL 基础结构 URL(统一资源定位符)是用于定位互联网上资源的地址,完整结构如下(中括号【】内为可选部分): 协议:// 主机名(IP地址)【:端口号】/[路径]【&…

2026/7/3 2:30:09 阅读更多 →
深空探测数据接口篇(四):LVDS接口

深空探测数据接口篇(四):LVDS接口

目录 前言 1. LVDS 技术概述 2. 物理层架构与工作原理 2.1 差分信号与低摆幅机制 2.2 电流驱动模式 2.3 终端匹配的重要性 3.常见的LVDS传输架构 4. 典型协议芯片及 SerDes 技术 4.1 驱动器与接收器:SN65LVDS / DS90LV 系列 4.2 串行/解串器 (SerDes) 4.…

2026/5/17 9:24:00 阅读更多 →

最新新闻

如何利用GalTransl实现Galgame自动化翻译:终极解决方案指南

如何利用GalTransl实现Galgame自动化翻译:终极解决方案指南

如何利用GalTransl实现Galgame自动化翻译:终极解决方案指南 【免费下载链接】GalTransl 支持GPT-4/Claude/Deepseek/Sakura等大语言模型的Galgame自动化翻译解决方案 Automated translation solution for visual novels supporting GPT-4/Claude/Deepseek/Sakura …

2026/7/3 17:05:40 阅读更多 →
电商订单追踪应用遭滥用引发回拨钓鱼攻击研究

电商订单追踪应用遭滥用引发回拨钓鱼攻击研究

摘要 随着移动购物辅助应用的普及,网络钓鱼攻击载体逐步从传统邮件向正规移动端应用迁移,依托用户对合规平台的信任实施欺诈的攻击模式开始蔓延。本文以 Shopify 旗下 Shop 订单追踪应用被恶意利用事件为研究样本,梳理不法分子借助该应用植入…

2026/7/3 17:03:39 阅读更多 →
我已严肃深扒Claude Code的源码,证明那段针对国内用户的代码是真的。

我已严肃深扒Claude Code的源码,证明那段针对国内用户的代码是真的。

大家好,我是二哥呀。 Anthropic 最近又封了一大批号,身边很多朋友都中招了。 社区有大佬发现,Anthropic 在 Claude Code 的打包文件里藏了一组极其隐蔽的函数,专门用来标记是不是中国用户。 其中之一,就是用了一组 Uni…

2026/7/3 17:01:38 阅读更多 →
STM32与MC6470 IMU的硬件集成与姿态解算实战

STM32与MC6470 IMU的硬件集成与姿态解算实战

1. MC6470与STM32F030RC的硬件组合解析MC6470是一款6自由度惯性测量单元(6DOF IMU),集成了三轴加速度计和三轴陀螺仪。这款传感器采用数字输出接口,通过I2C或SPI与主控芯片通信。在实际项目中,我选择它的主要原因有三个…

2026/7/3 17:01:38 阅读更多 →
openEuler release-tools实战教程:使用majun模块自动化管理软件包版本 [特殊字符]

openEuler release-tools实战教程:使用majun模块自动化管理软件包版本 [特殊字符]

openEuler release-tools实战教程:使用majun模块自动化管理软件包版本 🚀 【免费下载链接】release-tools Tools for version release 项目地址: https://gitcode.com/openeuler/release-tools 前往项目官网免费下载:https://ar.opene…

2026/7/3 17:01:38 阅读更多 →
数据迁移双写校验:两边都写成功,不代表数据一致

数据迁移双写校验:两边都写成功,不代表数据一致

数据迁移双写校验:两边都写成功,不代表数据一致 大规模数据迁移中,双写是常见过渡方案。旧库写一份,新库写一份,等校验通过后切流。听起来稳,但双写成功不等于数据一致。写入顺序、重试、幂等、字段转换、异…

2026/7/3 16:59:37 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻