dlua 0.1 发布,gdb 风格的 lua 调试器

dlua 是一个类似 gdb 的 lua 调试器。

特性

  • 支持Linux平台
  • C++编写
  • 通过附加到其他进程上,进行调试
  • gdb风格的调试指令,包括设置条件断点、查看变量、设置变量

编译环境

  • 下载编译安装 lua
  • 用脚本编译 dlua,生成dluadluaagent.sodlua是控制台,dluaagent.so是调试插件
# ./build.sh
  • 下载编译hookso,生成hooksohookso是注入工具
  • 最后将dluadluaagent.sohookso放在同级目录即可使用

使用方法

  • 找到目标进程pid,也可以使用项目中的示例代码。假设pid=1234
# lua test.lua
  • 运行dlua,附加到1234进程,出现如下提示,说明连接正常,可以开始调试
# ./dlua 1234
attack to 1234 ok, use ctrl+c to input command, eg: h
  • 输入ctrl+c,输入h回车查看帮助
(dlua) h
h       help commands
q       quit
bt      show cur call stack
b       add breakpoint, eg: b test.lua:123
i       show info, eg: i b
n       step next line
s       step into next line
c       continue run
dis     disable breakpoint, eg: dis 1
en      enable breakpoint, eg: en 1
d       delete breakpoint, eg: d 1
p       print exp value, eg: p _G.xxx
l       list code
f       select stack frame
fin     finish current call
set     set value, eg: set aa=1
r       run code, eg: r print("test")
  • 其他命令同理,输入ctrl+c,输入命令即可
(dlua) bt
0 in string_time_to_unix_time at test.lua:23
1 in ? at test.lua:50
2 in ? at [C]:-1
  • 退出,则输入q
(dlua) q
#

命令

h

帮助

q

退出

bt

查看调用堆栈

b

打断点,打在某个文件某一行

b test.lua:34

打在当前文件的某一行

b 34

打在当前正执行到的行

b 

打在某个函数的入口

b string_time_to_unix_time_with_tz

打在某个嵌套函数的入口

b _G.test.getweekstart_by_tz_test

条件断点,方括号的tz表示需要的参数,作为输入参与到后面的表达式计算

b string_time_to_unix_time_with_tz if [tz] tz==800

i

罗列当前的断点

i b

n

下一行,如果当前位置是函数,则跳过内部

s

下一行,如果当前位置是函数,则跳进内部

c

取消步进,继续执行

dis

取消断点,取消某个断点

dis 1

取消所有断点

dis

en

生效断点,生效某个断点

en 1

生效所有断点

en

d

删除断点,删除某个断点

d 1

删除所有断点

d

p

查看当前栈的变量,如

p year

或者全局的

p _G.test

或者复杂的,查看table中的某一项,[]表示需要传入的变量,作为输入参与到后面的表达式计算

p [tmp] tmp.abc

l

查看当前栈的附近代码,如

l

查看附近20行的代码

l 20

f

设置当前栈帧,具体编号从bt查看,如

f 0

fin

跳过执行当前函数

set

设置当前栈的变量,如

set year=1234

r

运行特定代码

r print(123)

运行复杂代码,加上变量,[]表示需要传入的变量,作为输入参与到后面的表达式计算

r [tmp] tmp[1]=2
优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/122419/dlua-0-1-released

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。