通过telnet查看程序中的变量及执行调试函数

如题,某些应用就支持这种功能。如何实现的呢?

linux_dev_framework软件包中的telnetd4dbg_test.c就是一个实现示例。

该程序运行后,用户通过telnet  127.1 10000即可登陆到此程序的调试shell环境中

然后即可输入变量名查看变量值,或者输入 变量名=值 以修改变量的值,或者执行调试函数。

例如,

输入 my_var,即可查看变量my_var的信息。

输入 my_var=5,即可将变量my_var的值修改为5。

输入 my_func(1, "good", 0x123) 即可使用输入的参数执行函数my_func
目前最大支持8个参数,且每个参数size必须等于sizeof(long)
my_func函数的各个入参就是一个符合要求的例子。


输入d(mem_addr, len)可以查看内存的内容
例如,

输入d(0x12345678, 32)即可查看内存地址0x12345678处的32个字节的内容。


运行效果:

[root@localhost ~]# cd linux-dev-framework

[root@localhost ~]# make

...

[root@localhost linux-dev-framework]# ./target/telnetd4dbg_test.exe 

然后,用户通过telnet命令登陆到此程序的调试shell环境,就能感受到类似如下的调试体验了。

[root@localhost ~]#telnet 127.1 10000


 ****debug_shell started****
you can input var names to see var info
you can input d(addrress, len) to see memory contents
you can input xxx(1, 0x2, "abc") to execute function xxx
caution: every args's size of function xxx must == sizeof(long)


[debug_shell]#my_var
[var address] : 0x6030cc


[values] :
1 byte :0xd2               (-46)
2 bytes:0x4d2              (1234)
4 bytes:0x4d2              (1234)
8 bytes:0x63d87640000004d2 (7194630421974353106)


[debug_shell]#my_func(1, "hello", 0x64)
para1=1 para2=0x7fe8639cae1b para3=100
para2 contents = hello
[debug_shell]#


本程序源码在linux-dev-framework源码包中。

linux-dev-framework源码包的介绍:http://blog.csdn.net/crazycoder8848/article/details/22491525

你可能感兴趣的:(linux,C语言,telnet,调试)