C编程风格的人机交互 -- CSHELL (提供源码下载)

记得上大学时,做C语言的程序都是用sdb来调试的;再后来有了gdb,同sdb差不多,不过就好用了很多。但终究还是有点遗憾。比如,程序里设计了几个函数,如果想测试下它们,就不得不再编写个测试函数,用各种可能的输入进行调用;测试完后,一般会删掉这段测试代码,如果是保留着,那下次修改了函数的参数接口,编译器就开始抱怨了,只好坚持维护那一段测试代码。当时我就在想,要是有个SHELL界面,让我直接运行那些函数就好了。这样就不用费尽写些测试代码,更别说维护了!

工作后,很多时候是做嵌入式系统,那丫可没有GDB,或者说GDB没那么容易用上。当然,更直接的挑战是,已经上线运行的系统,GDB就不用考虑了!除非我们提前考虑到哪些需要在CLI里提供debug信息,其它一切就都是黑盒子了!此外,客户可能有各种各样的想法,要求我们预制各类开关。通过CLI调整这些开关值当然可行,但总不是那么方便。我以前给电信做移动电话程控交换机,全国应用了数百套设备,每套设备都有自己的特殊配置。

怎么办才能做好呢?程序行为跟某个全局变量有关,但却没法查看那个变量当前的值;程序出错了,因为忘了某个初始化函数。这种时候,我们需要一个CSHELL接口,让程序里所有的全局变量,函数变得可以查看,修改和运行。当然,这一切都是自动完成的,准确点说,只要make就有了!

下载地址:

http://files.cnblogs.com/files/hhao020/cshell_prj.re0.001.rar
请解压后在Linux系统下编译(需要perl环境)。

CSHELL涉及Lex,Yacc,ELF解析等技术,以下为其实现过程:
1,编写cshell.l词法文件, cshell.y语法文件;
2, 使用Lex和Bison(Yacc)生成SHELL输入的解释文件(C源代码);
3,Make编译并第一次链接生成.out文件(符号表为空);
4,使用p_readelf.pl(调用readelf)生成符号表源文件;
5,Make第二次链接生成.out文件(含符号表);
注:CSHELL符号表并非ELF文件的符号表,具体可参见c_sym_table.c文件。

应用开发者,只需要链接CSHELL库和符号表,并在其程序中提供CSHELL的输入接口,就能够获得CSHELL的一切功能。
链接中的CSHELL运行起来,会是这个样子:

cshell_prj $ bin/linux.i64/user.exe 
$7/> DemoVar1;
= 10 (0x620000000A) <SYM_DATA : size=4>

$11/> DemoCall2("my int var", 5);
input my int var=5
= 0 (0x0) <FUNCALL : size=0>

-><cmd/test.cmd
...............

CSHELL语法是C语言编程的一个子集,只help里的内置命令除外。使用有几个技巧:
1,函数调用最多支持10个参数,多了会被丢弃,结果嘛,呵呵~当然,可以改cshellfuns.c来调整;
2,调用时,少给了几个参数,会被默认为0,好好利用这个特性,比如打印实例函数!
3,可以添加变量,比如x=123;
4,可以多个表达式写一行,用分号;隔开;
5,可以将函数结果赋值给变量,如x=functioncall(...),当然,这时候的x必须先存在或是创建好;
6,可以批量运行,执行<script即可,比如执行链接里的脚本 <cmd/test.cmd

对于CSHELL希望作些定制的朋友,可以阅读cshellfuncs.c。原理很简单,就是将输入编程一个二叉树,左孩子右兄弟;实现时,考虑的细节还是蛮多的,必须的,要不就不好玩了!看明白这个cshellfuncs.c,又弄明白编译过程的朋友,可以留言索取lex词法文件和yacc语法文件。没上传,不影响任何使用,CSHELL是个开源代码,我不想被某个公司据为己有,你可以用,但不能剥夺别人用的权利。

当然,凡事有利必有害。CSHELL给你方便的同时,也让你的程序空间暴露在外,遇到恶意调用修改,则会让程序出错,或是行为变得不可测。哥建议你自己给CSHELL加个鉴权,如果CSHELL有幸被放入某个产品中去的话。

时间: 2024-11-13 03:22:35

C编程风格的人机交互 -- CSHELL (提供源码下载)的相关文章

重磅来袭,开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 啥话也不说了,直接上源码:下载源码(由于公司服务器在香港,所以如果下载速度过慢可来此下载网盘) 项目结构图如下: 后台管理页面: 一个完整的网上商城应该至少包含以下几个方面: 1 基本数据:品牌,分类,属性(有些属性用作sku,有些属性还要提供商品筛选功能). 2 商品属性:商品图库,商品属性列表,商品关键词列表,商品库存(有的需要按照仓库拆分

开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载(非官方文章)

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 源码下载地址: asp.net(c#)开源商店系统Brn shop 1.9(免费仿京东商城) asp.net(c#)开源商店系统Brn shop 2.1(免费仿京东商城) 项目结构图如下: 后台管理页面: 功能简介: 1 基本数据:品牌,分类,属性(有些属性用作sku,有些属性还要提供商品筛选功能). 2 商品属性:商品图库,商品属性列表,商品

开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载

BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,1旦整理完成也全部开源).         MVC3.0下载地址:        https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=4211 源码下载地址: asp.net(c#)开源商店系统Brn shop 1.9(免费仿京东商城) asp.net(c#)开源商店系统Brn shop 2.1(免费

EasyMvc--让MVC区域开发更Easy(提供源码下载)

核心: 主要利用MVC的区域功能,实现项目模块独立开发和调试. 目标: 各个模块以独立MVC应用程序存在,即模块可独立开发和调试. 动态注册各个模块路由. 一:新建解决方案目录结构 如图: 二:EasyMvc.Core即为核心库. 核心库三大主力:AreaConfig .RouteConfig .FilterConfig AreaConfig :为区域启动停止以及其他状态时注入的方法,类似与Global.asax里面Application_Start.Application_End方法. Rou

最新版本的Struts2+Spring4+Hibernate4三大框架整合(截止2014-10-15,提供源码下载)

一. 项目名称:S2316S411H436 项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 + Quartz2.2.1 源代码下载地址: 基本版:http://download.csdn.net/detail/liyunqi007/8040987(此版本还没有整合Quartz) 改进版:http://download.csdn.net/detail/liyunqi007/8042997(比较上个版本,整合了Quartz和Gson) 更详细具体的说

【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csdn.net/shulianghan VLC 二次开发 视频教程 : http://edu.csdn.net/course/detail/355 博客总结 : -- 本博客目的 : 让 Android 开发者通过看本博客能够掌握独立移植 VLC Media Player 核心框架到自己的 app 中,

酷毙了!三种风格的全屏幻灯片效果【附源码下载】

今天,我们想向您展示如何创建平铺背景图像的幻灯片效果.其灵感来自于国外的一个工作室网站(围观),这个网站充满了各种有趣和创意效果,一定记得去看看. 这个幻灯片效果是由四个区域的独立移动构成,通过画面分割,同时显示出新的图片.这里需要组合使用 CSS3 的3D转换.过渡和动画功能.除了这种效果我们也将添加两个更多的变化,我们的宗旨是实现超流畅的交互体验. 温馨提示:为保证最佳的效果,请在 IE10+.Chrome.Firefox 和 Safari 等现代浏览器中浏览. 源码下载      在线演示

手机模板_苹果风格 iOS7 X3_X3.1版源码

[模板介绍:三十大功能与特性]:0.[具有蓝.橙.绿.宝石绿.青.酷黑.红.玫瑰红.粉红.紫.商务蓝.灰蓝12种配色],支持无限配色扩展! 支持iOS.Android系统,兼容多种移动终端!1.[支持图片墙瀑布][发帖.回帖等上传多张图片].2.[App化处理]让您的网站更像一个独立的App应用!3.[全局侧边栏滑出面板菜单]酷炫时尚,动感十足!4.支持全局页脚.头部固定导航:5.支持帖子列表样式和图文样式浏览:[注意:1.(iOS6版只具有质感蓝.酷炫黑两种配色):2.(iOS6版不支持图片墙

关于怎么做大发彩票源码下载高质量的代码,给你提供一些解决方案

写出大发彩票源码下载论坛:haozbbs.com Q1446595067高质量代码,并不是搭建空中楼阁,需要有一定的基础:这里我重点强调与代码质量密切相关的几点: 掌握好开发语言,比如做Android就必须对Java足够熟悉,<Effective Java>一书就是教授大家如何更好得掌握Java, 写出高质量Java代码. 熟悉开发平台, 不同的开发平台,有不同的API, 有不同的工作原理,同样是Java代码,在PC上写与Android上写很多地方不一样,要去熟悉Android编程的一些特性,