昨天发现服务器通讯并发有问题,所以希望在通讯层增加写调试信息输出来看看。当时首先想到的是用一般经常使用的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做调试输出相关推荐

  1. Keil MDK 中利用串口及c标准库函数printf为cortex-m3做调试输出(lpc1788)

    摘要: c标准库的printf是输出给显示器的,将printf函数进行修改,使其输出重定向至串口,就能实现目的.printf函数调用fputc函数完成实质输出单一字符的工作,因此将fputc函数修改使 ...

  2. 使用OutputDebugString帮助调试

    使用OutputDebugString帮助调试 前面我已经介绍了使用TRACE来帮助我们调试,但使用TRACE有一个限制,只能在将程序DEBUG编译状态下才能使用,下面我们介绍OutputDebugS ...

  3. STC15双串口printf调试输出案例

    STC15双串口printf调试输出案例 ✨本案例基于库函数开发,通过对库函数案例修改而来.如果所选单片机型号ROM比较小,那么就不要这么做.

  4. VC调试--输出调试字符串(含示例代码)

    VC调试 输出字符串 更新日期:2012-11-7 代码下载:trace.zip (请不要直接使用迅雷下载) 或者到邮箱下载: vcshare@ qq.com(密码:share88) 测试环境:vs2 ...

  5. python 笔记 PySimpleGUI 图形界面6- 高级API调用-进度表控件、调试输出

    整理 PySimpleGUI 官方网站 原文google翻译过来的 https://pysimplegui.readthedocs.io/en/latest/ 高级API调用 进度表控件 我们的代码中 ...

  6. Python调试输出变量一部分变成了省略号

    阅文时长 | 0.2分钟 字数统计 | 326.4字符 主要内容 | 1.引言&背景 2.解决方案 3.声明与参考资料 『Python调试输出变量一部分变成了省略号』 编写人 | SCscHe ...

  7. linux 普通io实现pwm,用普通IO口做PWM输出 - 51单片机 - 电子工程世界-论坛 - 手机版...

    本人现在想用IO口做PWM输出,频率1KHz,然后用两按键(+.-)来调节占空比0-100%,对应数码管显示000-100. 现波形是OK了,也可以调占空比,但是出现一个问题数码管显示乱七八糟,调了两 ...

  8. WinForm与WebForm调试输出

    WinForm与WebForm调试输出 1.WinForm程序: (1).开发时,将"工程输出类型"改为"控制台应用程序",就可以在Form下面有一个控制台窗口 ...

  9. 60-170-040-使用-Time-Flink时间系统系列之实例讲解-如何做定时输出

    1.世界 2.背景 ​ 如何做定时输出,首先说一下定时输出的需求背景,在flink流处理中需要将任务处理的结果数据定时输出到外部存储中例如mysql/hbase等,如果我们单条输出就可能会造成对外部存 ...

最新文章

  1. 深度学习中的最大似然估计简介
  2. C语言初学者代码中的常见错误与瑕疵(9)
  3. POJ 3461 kmp 应用
  4. 文本编辑软件_IDE与文本编辑器的比较
  5. Oracle学习笔记:blank_trimming的含义
  6. java泛型_Java核心知识 基础五 JAVA 泛型
  7. Python语法特点如注释规则、代码缩进、编码规范等
  8. [Pytorch] BCELoss和BCEWithLogitsLoss(Sigmoid-BCELoss合成为一步)
  9. 二分查找(Java实现)
  10. 2:0!Dota2世界冠军OG被OpenAI碾压,全程人类只推掉两座外塔
  11. JQuery中常用方法备忘
  12. 关于雄安新区的一点观察和思考
  13. Windows Server 2008 R2 小技巧
  14. 深度剖析WinPcap之(二)——网络分析与嗅探的基础知识(3)
  15. classes是什么意思怎么读_classes怎么读用法大全_classes是什么意思
  16. 服务器pe系统ghost系统安装教程,U盘PE启动安装GHOST系统图文教程
  17. 口碑点餐相关问题FAQ
  18. 主流编程语言的特点分析
  19. 2020年度十大高薪岗位出炉,程序员霸榜!
  20. JavaScript Debugger 原理

热门文章

  1. 深度洞见|品牌如何布局微信生态,玩转私域运营?
  2. Python时间序列LSTM预测系列教程(6)-单变量
  3. VMware 安装Ubuntu系统后,启动一直黑屏
  4. Mac安装ACC提示“无法检查更新 请检查您的互联网连接,然后再试一次“解决方法
  5. 互联网到底怎么连接的?一张图告诉你
  6. 记录大坑:用Xamarin引入UHF读写器dll,报错: 所生成项目的处理器架构“MSIiL”与引用的Reader.dll处理器架构“x86”不匹配
  7. seata源码解析:TM RM 客户端的初始化过程
  8. linux开放7050端口,Linux操作系统内核启动参数详细解析
  9. 哪家的云服务器便宜?
  10. 笑死:Welcome to Skip Thompson's Homepage