JavaScript调试的小工具(jsTrace)

深入浅出JavaScript 堆栈跟踪(Stack Trace):你的调试“导航仪” 堆栈跟踪(Stack Trace)的核心是调用栈(Call Stack),它是 JavaScript 引擎用来管理函数调用顺序的一种数据结构。当一个函数被调用时,它会被压入调用栈的顶部。当函数执行完毕后,它会从栈顶弹出。如果函数内部调用了其他函数,新函数会继续压入栈顶。a();a → b → c,执行完c后依次弹出,最终栈为空。堆栈跟踪是 JavaScript 开发者不可或缺的“导航仪”。它不仅是调试工具,更是错误分析、性能优化和系统监控的核心能力。通过。 阅读详情

前段时间写一个JavaScript的程序,根据用户鼠标的操作进行控件的拖放。感觉用 alter 或 断点跟踪调试的方法太难受了。就仿照MFC的TRACE功能写了如下的小代码(trace.js)。

拥有的功能如下:
  trace(str) : 在调试窗口输出信息;
  traceObj(obj): 在调试窗口输出对象所有不为空的属性;
  tracefmt(...): 按照用户定义的格式进行输出
  traceHTML():  输出当前函数所在页面的HTML页面
调试窗口: 
  支持调试信息拷贝到剪贴板和清空调试信息

  使用例子如下:
<input type ="button" onclick = "tracefmt('%s add %s = %s', val1.value, val2.value, result.value)" value = "TestTrace">

 请将后面的代码分别保存成 trace.js 和 trace.html, sample.html
//--------------------------trace.js-------------------------------
 var tracewin = null;
 var tracenum=1;
 function trace(str){
   if(tracewin==null || tracewin.closed)
     {
      tracewin = window.open('trace.html','tracewindow',
        'height=400;width=100;top=600;left=800;resizable=yes');
     }
   if(tracewin){
        tracewin.traceStr(tracenum+":"+str);
       tracenum++;
   }
}

function traceObj(obj){
  //return;
    var strObj='obj:'+obj+'/n/r';
    for(prop in obj)
    {
        if(obj[prop])
            strObj += ('/t'+prop +'='+obj[prop]+';/n/r');
    }  
    trace(strObj);
    return strObj;
}

function format()
{
  var i, msg = "", argNum = 0, startPos;
  var args = format.arguments;
  var numArgs = args.length;
  if(numArgs)
  {
    theStr = args[argNum++];
    startPos = 0;  endPos = theStr.indexOf("%s",startPos);
    if(endPos == -1) endPos = theStr.length;
    while(startPos < theStr.length)
    {
      msg += theStr.substring(startPos,endPos);
      if (argNum < numArgs) msg += args[argNum++];
      startPos = endPos+2;  endPos = theStr.indexOf("%s",startPos);
      if (endPos == -1) endPos = theStr.length;
    }
    if (!msg) msg = args[0];
  }
  return msg;
}

function tracefmt()
{
  var i, msg = "", argNum = 0, startPos;
  var args = tracefmt.arguments;
  var numArgs = args.length;
  if(numArgs)
  {
    theStr = args[argNum++];
    startPos = 0;  endPos = theStr.indexOf("%s",startPos);
    if(endPos == -1) endPos = theStr.length;
    while(startPos < theStr.length)
    {
      msg += theStr.substring(startPos,endPos);
      if (argNum < numArgs) msg += args[argNum++];
      startPos = endPos+2;  endPos = theStr.indexOf("%s",startPos);
      if (endPos == -1) endPos = theStr.length;
    }
    if (!msg) msg = args[0];
  }
  trace(msg);
}

function traceHTML(){
  var parObj = document.body;
  while(parObj && parObj.tagName != 'HTML'){
    parObj = parObj.parentElement;
  }
    trace(parObj.outerHTML);
}

function getTime(){
  var now= new Date();
  var strTime= now.toLocaleTimeString()+':'+ (now%1000);
  return strTime;
}
function traceTime(info){
  var strInfo = getTime()+':'+ info;
  trace(strInfo);
}


//--------------------------trace.html-------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script language="JavaScript">
    function traceStr(str){
    var oOption = document.createElement("OPTION");
    form1.traceList.options.add(oOption);
    oOption.innerText = str;
    oOption.selected=true;
    //form1.btnClose.focus();
    }
    function traceInfoClick(){
      var nIndex=form1.traceList.selectedIndex;
      if(nIndex!=-1)
      {
        form1.txtComments.value=form1.traceList.options[nIndex].innerText;
        form1.btnCopy.disabled=false;
      }
      else
      {
        form1.txtComments.value='';
        form1.btnCopy.disabled=true;
      }
    }
    function CopyData()
    {
      var nIndex=form1.traceList.selectedIndex;
      if(nIndex!=-1)
      { 
        strSelect = form1.traceList.options[nIndex].innerText;
        window.clipboardData.setData('text',strSelect.substr(strSelect.indexOf(':')+1));
       }
    }
    function ClearData()
    {
        form1.traceList.innerHTML="";
    }
  </script>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>JavaScript Tracer;</title>
</head>
<body>
<form name="form1">
  <center>
    <select name="traceList" style="width:80%;height:40%" size="2"
      onclick="traceInfoClick()">
    </select><br/>
    <TEXTAREA style="width:80%;overflow:scroll" name="txtComments" rows="10">
    </TEXTAREA>
  </center>
  <p align="right">
      <input type="button" value="Clear" name="btnClear"
      onclick="ClearData()"/>
    <input type="button" value="Copy" name="btnCopy"
      onclick="CopyData()" disabled="disabled"/>
    <input type="button" value="Close" name="btnClose"
      onclick="window.close()" align="right" />
  </p>
  </form>
</body>
</html>

//--------------------------Sample.html-----------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> TestJavScriptTrace </title>
<script language="JavaScript" src="trace.js"></script>
</head>

<body>
<input type ="text"name ="val1" size="30" value = "11111"><br/>
<input type ="text"name ="val2" size="30" value = "22222"><br/>
<input type ="text" name ="result" size="30" value = "33333"><br/>
<input type ="button" onclick = "tracefmt('%s add %s = %s', val1.value, val2.value, result.value)" value = "TestTrace">
</body>
</html>

百度post参数分析(二)完结,dv、traceid的js来源 上一篇已经找到了post参数中的dv来源,今天继续往下看,回顾一上一篇中dv的相关js var a = document.getElementById("dv_Input") , c = { gid: n.guideRandom... 阅读详情

相关推荐

trace:JavaScript调试、测试、错误监测上报工具

trace.js JavaScript代码调试、测试、错误监测上报工具,提供各浏览器下统一的日志控制台,兼容包括IE6在内的所有主流浏览器。超轻量级工具。 使用方法 开发时在页面里引入trace.js: [removed][removed] 在浏览器里打开页面,按组合键 Alt + ~ 即可打开日志控制台。 日志控制台的操控方法及快捷键使用请查看日志控制台右上角的 Help 菜单。 为提高线上的性能或者减小JS文件大小,上线时可换成trace-online.js: [removed][removed] 当然也可以不换。trace-online.js里的代码请自行按照业务需求修改。 API文档 trace(value1, value

探索高效JavaScript性能追踪:JStrace详解

探索高效JavaScript性能追踪:JStrace详解 是一个轻量级、高性能的JavaScript性能监控库,它允许开发者深入理解他们的应用在运行时的行为,从而定位和修复性能瓶颈。通过提供实时的CPU事件追踪,JStrace为前端优化提供了宝贵的洞察力。 技术分析 JStrace的核心是基于Web Worker的,这使得它可以在不阻塞主线程的情况下执行追踪任务。其API设计简洁,易于集成到任何现...

gitblog_00032的博客 482

Node.js-jstrace-对JavaScript动态跟踪类似于dtracektap等

jstrace - 对JavaScript动态跟踪,类似于dtrace、ktap等

Node.js 的 trace events 架构

前言: trace 系统用于收集内核的数据,本文介绍在 Node.js 中 trace 系统的架构和实现,因为 Node.js 的 trace 系统是基于 V8 的,所以也会介绍 V8 部分。 Node.js 中 trace 数据通过两种方式产生,第一种方式是在 JS 层通过 V8 提供的 trace C++ API,第二种方式是通过 Node.js C++ 层。下面首先看一下第一种。 // binding.trace(phase, category, name, id, data) SimpleIns

标子 的专栏 1640

ChromeJavaScript前端TraceViewer.zip

Trace Viewer 是 Chrome 和 Android Systrace 的 JavaScript 前端。它提供给各种类型的跟踪文件提供强大的分析和可视化能力,在跟踪 Linux kernel 和 Chrome 的 trace_event format 上尤其有用。Trace Viewer 可作为一个组件嵌入到你的代码中。 标签:Trace  Web框架

trace-deps:Node.js源文件的依赖关系跟踪工具

踪影 :microscope: Node.js源文件的依赖关系跟踪工具。 概述 trace-deps可以解析CommonJS / ESM源文件,检查依赖项语句,并为所有推断出的依赖项生成磁盘上绝对文件路径的列表。 该库当前可处理以.js .mjs文件, .mjs文件扩展名包含以下依赖项语句: require("<string>") :CommonJS需要。 require.resolve("<string>") :CommonJS需要解析(将路径返回到依赖项而不是已加载的代码)。 import "<string>" , import <var> | { <var> } | * as <var> from "<string>" import <var> | { <var> } | * as <var> from "<string>" import <var> | { <var> } | * as <var

trace() js

查看函数是如何运行(运行轨迹)的 直接引用就可以了 console.trace();

Iloveskr 520

JavaScript中的console.trace()函数介绍

主要介绍了JavaScript中的console.trace()函数详细介绍,console.trace()函数用来打印函数调用的栈信息,需要的朋友可以参考下

掌握 JS Stack Trace

在使用 Roadhog 编译过程中,我的终端崩掉了,怀着好奇的心理,我找到了 JS Stack Trace 这样的提示,怎么理解呢,这节我们来探究一下。本文并不会告诉你“终端崩溃了,如何解决?”,我只会围绕 “JS Stack Trace” 异常来分析,我们可能碰到了什么问题,以及需要了解的相关技术栈。 一、队列(Queue)与栈(Stack)最早是在数据结构的线性表中接...

Jartto's Blog 2573

OpenHarmony 4.1/5.0 Beta上手:如何用ArkUI在非华为设备上开发你的第一个“鸿蒙”应用

本文详细介绍了如何在非华为设备上使用ArkUI开发OpenHarmony应用,涵盖从设备选型、环境搭建到应用部署的全流程。通过实战案例展示ArkTS语言在开源鸿蒙生态中的应用,帮助开发者突破设备限制,构建跨平台鸿蒙应用。

weixin_33704234的博客 364

UI-TARS本地部署

UI-TARS是一个用于本地部署的交互控制模型,支持桌面应用的自动化操作。部署步骤包括:首先,从官方GitHub仓库下载项目源码和模型checkpoint;其次,使用vLLM框架进行本地模型部署,启动API服务;最后,通过客户端调用API实现功能。部署过程中可能遇到pynvml模块或模型配置问题,提供了相应的解决方案。此外,还支持通过UI-TARS-Desktop客户端进行本地桌面应用的交互控制。整体流程旨在帮助用户快速实现UI-TARS的本地部署与应用。

DYF的博客 2531

OpenHarmony Trace的使用

近期很多开发者反馈OpenHarmony三方库Imageknife有性能问题:连续拖动很多张图片时,界面有明显的卡顿现象。因为对这个三方库的源码并不了解,因此需要了解目前Imageknife渲染花费了多少时间,最初想的是只有通过hilog打印日志看执行时间,后来一搜发现。国庆节后来计划来优化Imageknife。

sd2131512的专栏 973

用python自动复制粘贴excel表里某一列的数据到另一个表中

昨天接到人事小姐姐求助减轻复制粘贴的重复工作量,分享一下代码 半路新手上路 耶 把 2.xlsx 表里的第二列 的数据复制粘贴到 test.xlsx的第一列 python3.6.2 from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.writer.excel import Exc...

weixin_33854644的博客 2万+

bearcat-jstrace 让检测线上方法调用性能成为可能

概述 tj 实现了一个 jstrace,可以用于动态的对node进行类似于dtrace,ktap的trace分析,可以动态检测线上api接口的访问性能,用于express中tj也实现了一个中间件express-jstrace,但是express-jstrace更像一个filter,只能检测req res的性能,通过bearcat提供的强大的AOP支持, ...

weixin_33982670的博客 133

JS自动化生成大疆WPML航线文件实战(附完整代码与云台控制解析)

本文详细介绍了如何利用JavaScript自动化生成大疆WPML航线文件,以解决手动规划航线效率低、易出错的问题。通过解析WPML文件结构,特别是云台控制等核心参数,并封装可复用的JS模板函数,开发者能够快速批量生成复杂航线,如倾斜摄影五向飞行,实现航测与巡检任务的标准化与高效执行。

weixin_29007243的博客 299

43、基于机器学习的GNSS信号质量监测方法

本文提出了一种基于支持向量机(SVM)的GNSS信号质量监测方法,旨在有效检测邪恶波形(EWF)威胁并抑制多径干扰对导航精度的影响。通过构建包含现场采集与合成数据的数据集,结合11个相关器测量值、链路预算、仰角和方位角等特征,采用RBF核函数的SVM模型进行分类。研究评估了不同平滑时间窗口对漏检率和误报率的影响,结果表明在约35-40秒平滑时间下性能趋于稳定,并可通过多数投票机制进一步优化检测性能。该方案适用于星载GNSS接收器,在计算资源受限条件下实现了高可靠性与低完整性风险的平衡。

yyy34的博客 188

写一个 JS 调用栈可视化工具 hound-trace

背景 最近在分析一些框架源码,在写笔记的时候,一些函数的调用栈希望用流程图的形式记录下来,打开 http://draw.io[1] 就是一顿操作,画了几个调用栈之后,感觉很麻烦。于是蹲在厕所里的我开始思考了,调用栈既然可以用 console.trace() 打印出来,那是不是也可以把数据记录下来直接画出流程图来? 当然我从不喜欢造轮子,首先熟练的打开 google 操作一波,发现地球之...

前端技术小哥 1494

CKA-CN考试之路----1

后的的任意位置,但-n 和autoscale 必须是相连的.后面不再对命名空间部分做解释了.说明配置正确,如果无法保存退出,再次检查对齐.不用怀疑一定是复制的时候少了字母或者对齐出错.运行以下命令确认红色箭头的值和题目要求是否一致。将文档中的内容复制并粘贴到对应位置.,后续不再提醒yaml的对齐。确认脚本check1.sh。

Q先生 606

JavaScript Stack Trace 使用指南

JavaScript Stack Trace 是一个轻量级的库,旨在帮助开发者在JavaScript环境中获取详细的错误堆栈跟踪。本项目由 Eriwen 维护,可通过 GitHub 页面 [eriwen/javascript-stacktrace](https://github.com/eriwen/javascript-stacktrace.git) 获取源码及最新更新。对于那些需要在各种浏览器

gitblog_00853的博客 695

FCTA/FCTB 前方交通穿行预警/制动系统技术规范

FCTA&FCTB前方交叉路口预警制动系统是针对十字路口和停车场等"鬼探头"场景设计的驾驶辅助系统。系统在自车速度0-40km/h范围内工作,通过角雷达和摄像头检测侧向来车.

未知艺术家的博客 739

QPrintPreviewDialog 打印预览使用实例

qt打印机预览实用demo

啊渊的专栏 3677

探索深度:利用Trace打造无死角的错误追踪体验

探索深度:利用Trace打造无死角的错误追踪体验 在软件开发的世界里,每一个未解决的bug都如同迷雾中的谜题,等待着开发者去揭开。今天,我们带来了一个强大的开源工具——Trace,它专为Node.js量身定制,旨在创造前所未有的长栈跟踪体验,让你能一目了然地深入代码的每个角落。 项目介绍 Trace是一个轻巧而高效的库,它的使命简单明了:扩展Node.js的默认堆栈跟踪深度,使之能够展现出更全面的...

gitblog_00517的博客 684

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

nodejs tracer 模块实现日志跟踪

转自:https://github.com/baryon/tracer   var logger = require('tracer').console(); logger.log('hello'); logger.trace('hello', 'world'); logger.debug('hello %s', 'world', 123); logger.info('hello %s %

在梦中享一刻静谧,等待梦中的你 3658

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JS_常用处理函数

JS常用的处理函数: 1.PHP时间戳转换 2.格式化URL对象内容

trace的技术备忘专栏 904
下一篇: 程序化的设计模式学习
fishjam
博客等级 码龄23年 170粉丝 37原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值