通过嗅探标准输入输出来了解VisualGDB烧录操作

作者:V君 发布于:2020-4-12 13:55 Sunday 分类:折腾手记

这篇文章主要面向的是和我一样不熟悉 GDB 的人,请已经熟练使用 GDB 的老鸟不要笑,或者来看看我是怎样嗅探标准输入输出的也还凑合吧。

最近用起 VisualGDB 之后,总算从 Keil 的地狱中逃出生天,开发过程的确是很爽了。然而,如果仅仅是程序烧录到单片机也要装一个 VS 带上 VisualGDB,还得拿到源代码?很显然实际量产不应该这么做,理想的方式应该是将编译后的程序用烧录工具刷入单片机。

好奇心使我对这个过程产生了兴趣,从调试器适配的时候提示下载 OpenOCD 能看出 VisualGDB 是透过它来调用 ST-LINK 的,进一步又发现 OpenOCD 的另一边由 GDB 来操作。命令行参数可以用 Procexp 轻松获得,但进程启动之后的就全都是通过标准输入输出流来操作 GDB 了。

因为使用 GDB 是个过于庞大的课题,就懒得去学了,短时间内也不会用得顺手吧(如果懂得如何使用 GDB 的话还用得着 VisualGDB 么?

想知道 VisualGDB 如何操作 GDB 来烧录程序。首先去咕狗找找标准输入输出的捕获方法,不断换关键字兜了几圈回来没有一点收获,甚至一点线索都没有。

一拍脑袋,那就搞个透明代理来记录双向传递的内容吧。于是就写了个简单的标准输入输出流嗅探工具,还上传了一个直接可用的二进制文件,将原来的 EXE 改名扩展名前面增加 -real,例如 GDB.EXE 改成 GDB-real.EXE 然后用嗅探工具冒充它,启动之后就会在旁边产生名为 GDB.EXE.stdio-sniff.yyyymmdd-HHmmss-fff.log 的文本文件,将命令行参数标准输入标准输出错误输出记录到里面。

这样问题就解决了——原来烧录要用 GDB 的 load 命令。

然后进一步尝试离开 VS 环境独立运行,将 OpenOCD 和 GDB 以及编译好的程序搬到一台没有环境的机器,装好 ST-LINK 驱动,按照嗅探来的操作走一波,嗯嗯,吼!现在离开 VS 环境也能烧录了!

标签: 软件开发 C# 命令行 cmd 多进程 控制台 调试技术 软件故障诊断

评论(0) 引用(0) 浏览(116)

简单实现进程之间通信

作者:V君 发布于:2014-4-28 12:56 Monday 分类:挖坑经验

由于某些组件很不稳定, 动不动就要让整个程序Crash, 于是开始玩多进程, 让你Crash! 别牵扯主进程 乂D

提到多进程通信, 我相信大家首先想到的就是什么WCF啦管道啦的, 这都比较麻烦啦!

看我怎么简单实现它! 简直无脑 乂D

阅读全文>>

标签: 软件开发 C# 多进程

评论(0) 引用(0) 浏览(1016)

Powered by emlog 去你妹的备案 sitemap