当前位置: 首页 > news >正文

newlisp debugger

写了很多newlsip程序,一直都是用println 来打印,查找问题。

但是随着程序越来越多,debug就变得越来越重要。今天在实现自己的TEA算法时,就需要调试newlips程序。

启动debugger很简单,只需要在newlisp会话中调用:

 

(trace true)

然后加载自己的lsp文件,调用函数,就可以进行调试了。

 

不过为了方便,还可以用(debug call-your-function)。

下面举个例子:

加入我有一个函数叫做cml-encrypt,用debug来调用它。

然后就会看到该函数的代码,并且提示你用s进入函数调试,n不进入当前调用的函数调试,c一直运行。

用# ... # 将当前正在求值的表达式包起来。

不足之处在于没有断点可以设置。

 

> (debug (cml-encrypt "12345678" "9000000000l1cm0c"))

-----

(define (cml-encrypt value key)
  #(let ((v0 (sum-bytes value 0 4)) (v1 (sum-bytes value 4 8)) (k0 (sum-bytes key 
      0 4)) 
    (k1 (sum-bytes key 4 8)) 
    (k2 (sum-bytes key 8 12)) 
    (k3 (sum-bytes key 12 16))) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4))#)


[-> 3 ] s|tep n|ext c|ont q|uit > s

-----

(define (cml-encrypt value key)
  (let ((v0 #(sum-bytes value 0 4)#) (v1 (sum-bytes value 4 8)) (k0 (sum-bytes key 
      0 4)) 
    (k1 (sum-bytes key 4 8)) 
    (k2 (sum-bytes key 8 12)) 
    (k3 (sum-bytes key 12 16))) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4)))


[-> 4 ] s|tep n|ext c|ont q|uit > n

-----

(define (cml-encrypt value key)
  (let ((v0 #(sum-bytes value 0 4)#) (v1 (sum-bytes value 4 8)) (k0 (sum-bytes key 
      0 4)) 
    (k1 (sum-bytes key 4 8)) 
    (k2 (sum-bytes key 8 12)) 
    (k3 (sum-bytes key 12 16))) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4)))


RESULT: 202

[<- 4 ] s|tep n|ext c|ont q|uit > n

-----

(define (cml-encrypt value key)
  (let ((v0 (sum-bytes value 0 4)) (v1 #(sum-bytes value 4 8)#) (k0 (sum-bytes key 
      0 4)) 
    (k1 (sum-bytes key 4 8)) 
    (k2 (sum-bytes key 8 12)) 
    (k3 (sum-bytes key 12 16))) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4)))


RESULT: 218

[<- 4 ] s|tep n|ext c|ont q|uit > n

-----

(define (cml-encrypt value key)
  (let ((v0 (sum-bytes value 0 4)) (v1 (sum-bytes value 4 8)) (k0 #(sum-bytes key 
      0 4)#) 
    (k1 (sum-bytes key 4 8)) 
    (k2 (sum-bytes key 8 12)) 
    (k3 (sum-bytes key 12 16))) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4)))


RESULT: 201

[<- 4 ] s|tep n|ext c|ont q|uit > n

-----

(define (cml-encrypt value key)
  (let ((v0 (sum-bytes value 0 4)) (v1 (sum-bytes value 4 8)) (k0 (sum-bytes key 
      0 4)) 
    (k1 #(sum-bytes key 4 8)#) 
    (k2 (sum-bytes key 8 12)) 
    (k3 (sum-bytes key 12 16))) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4)))


RESULT: 192

[<- 4 ] s|tep n|ext c|ont q|uit > n

-----

(define (cml-encrypt value key)
  (let ((v0 (sum-bytes value 0 4)) (v1 (sum-bytes value 4 8)) (k0 (sum-bytes key 
      0 4)) 
    (k1 (sum-bytes key 4 8)) 
    (k2 #(sum-bytes key 8 12)#) 
    (k3 (sum-bytes key 12 16))) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4)))


RESULT: 253

[<- 4 ] s|tep n|ext c|ont q|uit > n

-----

(define (cml-encrypt value key)
  (let ((v0 (sum-bytes value 0 4)) (v1 (sum-bytes value 4 8)) (k0 (sum-bytes key 
      0 4)) 
    (k1 (sum-bytes key 4 8)) 
    (k2 (sum-bytes key 8 12)) 
    (k3 #(sum-bytes key 12 16)#)) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4)))


RESULT: 355

[<- 4 ] s|tep n|ext c|ont q|uit > n

-----

(define (cml-encrypt value key)
  (let ((v0 (sum-bytes value 0 4)) (v1 (sum-bytes value 4 8)) (k0 (sum-bytes key 
      0 4)) 
    (k1 (sum-bytes key 4 8)) 
    (k2 (sum-bytes key 8 12)) 
    (k3 (sum-bytes key 12 16))) 
   #(cml-tea v0 v1 k0 k1 k2 k3 k4)#))


RESULT: (84941945375 84941945848)

[<- 4 ] s|tep n|ext c|ont q|uit > n

-----

(define (cml-encrypt value key)
  #(let ((v0 (sum-bytes value 0 4)) (v1 (sum-bytes value 4 8)) (k0 (sum-bytes key 
      0 4)) 
    (k1 (sum-bytes key 4 8)) 
    (k2 (sum-bytes key 8 12)) 
    (k3 (sum-bytes key 12 16))) 
   (cml-tea v0 v1 k0 k1 k2 k3 k4))#)


RESULT: (84941945375 84941945848)

[<- 3 ] s|tep n|ext c|ont q|uit > c
(84941945375 84941945848)


 

 

相关文章:

  • 爬取中华网科技新闻
  • 初学者比较容易犯的布局错误(手风琴布局)
  • Linux操作系统加固
  • 对 preferred-value 的理解
  • CMB面试准备-基础
  • 添加到web.config文件里的用户自定义翻页控件
  • [置顶] Web开发工具
  • php实现 称砝码(背包)
  • Debian samba支持域用户登录
  • Centos7命令行下安装和配置Apache服务器
  • linux命令截取文件最后n行(所有命令)
  • python-模块与包
  • Java进阶02 异常处理
  • Kerberos+LDAP+NFSv4 实现单点登录
  • mysql 常用函数
  • SegmentFault for Android 3.0 发布
  • [译]CSS 居中(Center)方法大合集
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【5+】跨webview多页面 触发事件(二)
  • Asm.js的简单介绍
  • conda常用的命令
  • JavaScript创建对象的四种方式
  • mysql中InnoDB引擎中页的概念
  • node入门
  • Odoo domain写法及运用
  • Shadow DOM 内部构造及如何构建独立组件
  • 程序员最讨厌的9句话,你可有补充?
  • 前端
  • 双管齐下,VMware的容器新战略
  • 鱼骨图 - 如何绘制?
  • ionic异常记录
  • ​​​​​​​​​​​​​​Γ函数
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #DBA杂记1
  • #include
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (ibm)Java 语言的 XPath API
  • (java)关于Thread的挂起和恢复
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (区间dp) (经典例题) 石子合并
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)母版页和相对路径
  • (转载)利用webkit抓取动态网页和链接
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core 6 集成和使用 mongodb
  • .NET Micro Framework 4.2 beta 源码探析
  • .net Stream篇(六)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually