应用程序debug调试方案

linux环境下debug调试问题怎样才能做到最方便?像单片机可以直接重写printf(puts)函数,直接将打印输出到串口;而linux下的应用程序如何实现,问题困扰了我好久,最近恰好想到一个比较不错的解决方案,仅供参考;

需求:

1、应用程序可以通过终端操作将日志重定向到指定位置(包括指定log文件,ssh终端,串口终端等)

2、应用程序的打印日志可以通过命令调节打印等级;

3、整个方案不涉及内核修改,方便做跨平台开发;

设计:

考虑到进程要将自身IO重定向到未知终端,这里需要新开发一个工具(暂且称谓程序1),做进程间的通信;在需要时用户通过工具携带参数,工具程序通过进程间通信的方式通知主控程序(程序2)将IO重定向到何处;这也是本次方案的主要思想;主要有以下几个应用场景:

1、用户通过ssh登录,想查看程序2当前的运行情况,需要将程序2的IO重定向到当前ssh,实现方案是,运行程序1,程序1通过tty命令获取当前终端文件描述,并通过IPC的方式发送给程序2,程序二收到命令后,将IO重定向到对应的tty。(同样的方法适用于通过串口登录终端,不同的是tty文件是不同的)

2、用户想调整打印日志的等级,通过程序1携带参数透传给程序2,程序2对参数进行解析,并调整打印等级。

3、用户想获取进程运行期间的某些进程状态,通过程序1携带参数透传给程序2,程序2对参数进行解析,并将状态信息返回给程序1的tty;

其中23步骤的命令完全可做到程序1完全透传参数给到程序2解析,这样的方便扩展,例如以后再增加其他控制命令,则不必再修改程序1,只做程序2的解析即可;

扩展:

方案实现起来可能会用到的几个函数如下:

int dup2(int oldfd, int newfd);

用于将标准IO重定向到指定文件描述符;

size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const  struct tm *timeptr
);

用于输出指定格式化时间字符串

int execl(const char * path, const char * arg, ...);

用来执行某个Liunx系统命令

几个接口只做了简单的描述,仅供参考。仅提出一个思路,具体实现自行设计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值