使用OutputDebugString做调试输出
昨天发现服务器通讯并发有问题,所以希望在通讯层增加写调试信息输出来看看。当时首先想到的是用一般经常使用的Codesite,但把调试代码增加到通讯单元后,编译居然跑不起来了,一跟踪才发现,原来是Codesite居然报地址错误了,再仔细一看。。。我的妈啊。。。Codesite对象居然是nil,本来这个对象应该是在csintf单元初始化时做的啊,以前用也好好的,怎么这次居然会无法初始化Codesite对象呢????太奇怪了,结果大半个下午都去研究这该死的Codesite了。。。无果。。。。
早上起来,神清气爽。。。突然想到用老早以前用过的一个函数OutputDebugString,这个是在Windows单元中的WIN32API函数,绿色环保,无污染,不残留。在调试状态下,用各种调试器可以捕捉程序中的 OutputDebugString 输出的信息。其实 OutputDebugString 就是往一片共享影射的内存中写入了一段数据,并创建了两个 Enevt,指明数据写入事件被触发。在delphi的OutputDebugString 输出的信息会在Event log窗口可以显示,如果是调试环境外运行,还可以用Debugview,AQTime等调试工具查看输出的信息。如果是使用Debugview这工具,还可以远程查看输出信息,这样就可以非常方便地捕捉和处理代码中调试信息的输出,实乃开发者居家旅行、杀人灭口,必备良药啊……简直爽歪歪~~~~~下午再次去测试部门调试服务器的通讯层,果然为最后成功找到原因立下了汗马功劳 ~~~下定了决心,以后抛弃Codesite,重新回到OutputDebugString的怀抱,而且考虑在合适的时候,把OutputDebugString能有机的结合到平台的日志模块中,增加平台的可调试性!
OutputDebugString(PChar(SysErrorMessage(GetLastError)));
也可以为OutputDebugString再做层函数封装,以更方便的使用:
procedure OutputDebugStr(const ADebugInfo: string);
begin
OutputDebugString(PChar(ADebugInfo));
end;
Debugview的下载地址:
http://download.sysinternals.com/Files/DebugView.zip
使用OutputDebugString做调试输出相关推荐
- Keil MDK 中利用串口及c标准库函数printf为cortex-m3做调试输出(lpc1788)
摘要: c标准库的printf是输出给显示器的,将printf函数进行修改,使其输出重定向至串口,就能实现目的.printf函数调用fputc函数完成实质输出单一字符的工作,因此将fputc函数修改使 ...
- 使用OutputDebugString帮助调试
使用OutputDebugString帮助调试 前面我已经介绍了使用TRACE来帮助我们调试,但使用TRACE有一个限制,只能在将程序DEBUG编译状态下才能使用,下面我们介绍OutputDebugS ...
- STC15双串口printf调试输出案例
STC15双串口printf调试输出案例 ✨本案例基于库函数开发,通过对库函数案例修改而来.如果所选单片机型号ROM比较小,那么就不要这么做.
- VC调试--输出调试字符串(含示例代码)
VC调试 输出字符串 更新日期:2012-11-7 代码下载:trace.zip (请不要直接使用迅雷下载) 或者到邮箱下载: vcshare@ qq.com(密码:share88) 测试环境:vs2 ...
- python 笔记 PySimpleGUI 图形界面6- 高级API调用-进度表控件、调试输出
整理 PySimpleGUI 官方网站 原文google翻译过来的 https://pysimplegui.readthedocs.io/en/latest/ 高级API调用 进度表控件 我们的代码中 ...
- Python调试输出变量一部分变成了省略号
阅文时长 | 0.2分钟 字数统计 | 326.4字符 主要内容 | 1.引言&背景 2.解决方案 3.声明与参考资料 『Python调试输出变量一部分变成了省略号』 编写人 | SCscHe ...
- linux 普通io实现pwm,用普通IO口做PWM输出 - 51单片机 -
电子工程世界-论坛 -
手机版...
本人现在想用IO口做PWM输出,频率1KHz,然后用两按键(+.-)来调节占空比0-100%,对应数码管显示000-100. 现波形是OK了,也可以调占空比,但是出现一个问题数码管显示乱七八糟,调了两 ...
- WinForm与WebForm调试输出
WinForm与WebForm调试输出 1.WinForm程序: (1).开发时,将"工程输出类型"改为"控制台应用程序",就可以在Form下面有一个控制台窗口 ...
- 60-170-040-使用-Time-Flink时间系统系列之实例讲解-如何做定时输出
1.世界 2.背景 如何做定时输出,首先说一下定时输出的需求背景,在flink流处理中需要将任务处理的结果数据定时输出到外部存储中例如mysql/hbase等,如果我们单条输出就可能会造成对外部存 ...
最新文章
- 深度学习中的最大似然估计简介
- C语言初学者代码中的常见错误与瑕疵(9)
- POJ 3461 kmp 应用
- 文本编辑软件_IDE与文本编辑器的比较
- Oracle学习笔记:blank_trimming的含义
- java泛型_Java核心知识 基础五 JAVA 泛型
- Python语法特点如注释规则、代码缩进、编码规范等
- [Pytorch] BCELoss和BCEWithLogitsLoss(Sigmoid-BCELoss合成为一步)
- 二分查找(Java实现)
- 2:0!Dota2世界冠军OG被OpenAI碾压,全程人类只推掉两座外塔
- JQuery中常用方法备忘
- 关于雄安新区的一点观察和思考
- Windows Server 2008 R2 小技巧
- 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(3)
- classes是什么意思怎么读_classes怎么读用法大全_classes是什么意思
- 服务器pe系统ghost系统安装教程,U盘PE启动安装GHOST系统图文教程
- 口碑点餐相关问题FAQ
- 主流编程语言的特点分析
- 2020年度十大高薪岗位出炉,程序员霸榜!
- JavaScript Debugger 原理
热门文章
- 深度洞见|品牌如何布局微信生态,玩转私域运营?
- Python时间序列LSTM预测系列教程(6)-单变量
- VMware 安装Ubuntu系统后,启动一直黑屏
- Mac安装ACC提示“无法检查更新 请检查您的互联网连接,然后再试一次“解决方法
- 互联网到底怎么连接的?一张图告诉你
- 记录大坑:用Xamarin引入UHF读写器dll,报错: 所生成项目的处理器架构“MSIiL”与引用的Reader.dll处理器架构“x86”不匹配
- seata源码解析:TM RM 客户端的初始化过程
- linux开放7050端口,Linux操作系统内核启动参数详细解析
- 哪家的云服务器便宜?
- 笑死:Welcome to Skip Thompson's Homepage