1.[UVM源代码研究] UVM的自动自动field_automation实现的print()函数如何灵活控制打印数组元素的数量
2.System.out.println打印对象,调用toString方法的打印打印原理
3.[UVM源代码研究] 如何定制一款个性化的打印格式
4.如何在博途软件中打印出程序的源代码?
5.FastReport.net 怎样实现浏览器直接打印无须预览
[UVM源代码研究] UVM的field_automation实现的print()函数如何灵活控制打印数组元素的数量
实际工作中,我们常遇到需打印包含多个数组或队列元素的源码源码transaction时,仅默认显示开始5个和最后5个元素。设置若需查看更多元素值或完整内容,自动自动可考虑两种方法:一是打印打印canopen通信源码重写transaction的do_print()函数,自定义打印内容与格式;二是源码源码探索现有UVM源代码,修改相关设定以实现打印更多元素。设置
首先,自动自动分析can_txrx_transfer的打印打印注册方式,发现其默认仅显示特定数量的源码源码元素。通过查看源代码,设置发现实现打印机制的自动自动关键在于UVM_FIELD_QDA_INT宏与UVM_FIELD_UTILS_BEGIN宏的结合,它们共同调用_m_uvm_field_automation函数,打印打印该函数根据指定的源码源码what_参数(如UVM_PRINT)调用相应的打印函数。
在调用print()函数时,最终调用_m_uvm_field_automation,进一步调用uvm_print_array_int3宏。该宏通过uvm_print_qda_int4宏实现打印逻辑,对静态或动态数组、backbonejs 源码队列元素的打印格式进行统一处理。在uvm_print_qda_int4宏中,定义了uvm_printer与uvm_printer_knobs变量,用于接收打印参数与配置信息。
uvm_default_printer作为全局变量,其配置决定了打印格式。在打印数组时,通过设置uvm_printer_knobs中的begin_elements与end_elements变量,可以灵活控制打印元素的数量。具体配置方法可将uvm_default_printer配置在test_base的build_phase中,实现对打印数量的精确控制。
通过上述分析,我们了解了UVM源代码实现打印机制的原理,并掌握灵活配置数组/队列元素打印数量的方法。这种方法不仅提供了更为灵活的打印控制,还能根据实际需求调整打印内容与格式,增强代码的可读性和实用性。
System.out.println打印对象,调用toString方法的sourcecounter 源码原理
打印对象时自动调用toString方法的原理是基于Java语言中对象的字符串表示和打印机制。
打印对象b时,对象内部自动执行初始化和调用toString方法,这是由Java对象的默认行为决定的。
理解toString方法被自动调用的原因,只需查看Java类库中的源代码即可。当调用print或println打印对象时,实际打印的是对象的toString方法返回的信息。
对象类中默认的toString方法为:public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());}。此方法用于返回对象的字符串表示形式,其核心是调用并返回对象的toString方法。
在print和println方法中,若传入一个Object类对象,实际打印的内容将自动调用String.valueOf()方法,将对象转换为字符串形式。此方法的实现为:public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString();}。当对象为null时,返回"null";否则,返回对象的toString方法结果。
因此,shadowsocksr源码当调用print或println打印对象时,实际上打印的是对象toString方法的返回结果,这就是自动调用toString方法的最终根源。
[UVM源代码研究] 如何定制一款个性化的打印格式
使用默认的打印格式时,执行如下代码:
实际打印结果格式如下:
查看UVM源代码,我们首先定位`uvm_info宏定义的位置:
这段代码对uvm_info/uvm_warning/uvm_error/uvm_fatal等宏进行了描述,实际上是对uvm_report_*函数的封装。以`uvm_info为例,分析其执行过程,其中使用了全局函数uvm_report_enabled。
这里又调用了uvm_root中定义的uvm_report_enabled函数。需要注意的是,在uvm_root中并未找到这个函数的定义。经过查找源代码,发现uvm_report_object中定义了uvm_report_enabled。
为什么要通过uvm_root实例调用这个函数呢?这需要了解uvm类库的继承关系。通过分析,我们发现通过调用uvm_root中uvm_report_enabled的函数,是touch源码因为uvm_root支持单例模式,可以获取uvm_root的单例句柄执行uvm_report_object中定义的自动继承的函数,避免了创建额外的实例。
接下来分析函数执行过程,原本简单的获取severity对应的verbosity阈值设置,却涉及了severity的override问题。我们可以通过调用函数或运行时传入参数来对severity进行override。
所有severity的override都记录在uvm_pool键值对severity_id_verbosities中。
severity和verbosity枚举类型定义如下:
回到uvm_report_object中行的代码,可以认为调用`uvm宏传入的verbosity值如果大于设置的verbosity阈值,则uvm_report_enabled返回0。另外行还有一种函数返回0的情况。
关于uvm_action和verbosity的设置类似,不再展开。执行`uvm_info系列宏时,不仅需要考虑severity对应的verbosity_level的设置是否大于阈值,还需要考虑对severity设置的行为是否为UVM_NO_ACTION来判断uvm_report_enabled的返回值。
本质上,执行的是uvm_report_server中的compose_message函数,该函数规定了uvm_info系列宏的打印格式。
这个函数的参数filename和line是我们调用uvm_report_info传入的`uvm_file和`uvm_line。
`__FILE__和`__LINE__是systemverilog的编译指令,在编译阶段被替换:`__FILE__被替换为当前文件的文件名,以字符串形式存在;`__LINE__被替换为当前文件的行号,以十进制数字形式存在。
如果需要定义个性化的打印格式,可以通过从uvm_report_server继承一个类重写compose_message函数实现。需要注意的是,这里不能用set_type_override_by_type/name,因为uvm_report_server类没有使用uvm_object_utils注册,也没有实现get_type()函数,所以不能用传统的factory的override方法进行override。好在uvm_report_server已经预留好了子类server的覆盖函数set_server。
这个静态函数可以直接使用类uvm_report_server进行调用。接下来,我们通过一个例子来看看如何实现个性化打印的定制。
首先,我们定制自己的report_server:
然后,在base_test中实例化并set_server:
现在,我们来看看最初那句打印的执行情况:
通过以上步骤,我们便实现了个性化的打印定制,该定制对4种severity同时生效。
如何在博途软件中打印出程序的源代码?
博途软件可以将程序导出到Word文档中,具体操作可以按照以下步骤进行:
1. 打开博途软件,打开需要导出的程序。
2. 在程序编辑页面中,选择菜单栏中的“文件”-“导出”-“导出为Word文档”。
3. 在弹出的导出对话框中,可以选择导出内容的范围和格式。
4. 如果需要导出程序的注释和说明,可以勾选“导出注释”和“导出说明”选项。
5. 点击“导出”按钮,选择保存的路径和文件名,并点击“保存”按钮即可。
6. 导出完成后,可以在保存的路径中找到导出的Word文档,打开查看。
需要注意的是,导出的Word文档中包含了程序的源代码、注释和说明,如果需要保护程序的机密性,可以考虑在导出前对程序进行加密或者删除敏感信息。此外,导出的Word文档中可能会存在格式和排版问题,需要根据需要进行调整和修改。
1
在项目树中选择工程项目
2
菜单“项目”--打印,打印机/文档布局/属性,选项如下
3
点击“打印 ”,弹出对话框,选择保存路径,填写文件名,点击“保存”
4
如果页数较多,请内心等待,最终保存如下
FastReport.net 怎样实现浏览器直接打印无须预览
在年,FastReport.net 的最新版本已经实现了浏览器直接打印无需预览的功能。这篇文章的初衷是填补早期关于FastReport.net打印功能的技术空白,尤其针对Web项目中的静默打印难题。静默打印意味着点击按钮后,打印机立即开始工作,无需预览环节。虽然在WinForm中相对简单,但在Web环境中却颇具挑战性,本文将深入解析如何实现在浏览器中结合FastReport.net实现这一功能。 之前的系列文章虽有价值,但本文将专注于提供最新的解决方案。源码中包含了两个示例项目,分别基于ASP.NET WebForm和ASP.NET Core Razor Page技术。JHRS.PrintClient是FastReport.Net的封装客户端,包含了必要的dll依赖。JHRS.PrintClientSetup则是打包安装程序,用于生产环境中的部署,通过安装程序将自定义协议信息写入注册表,便于用户下载并使用。 如果你对打包安装程序有疑问,可以参考相关教程。源码和演示网站的链接如下:Github地址:github.com/jhrscom/JHRS...
演示网站:fastreport.jhrs.com/
在开发管理系统,如医疗HIS系统或企业ERP等时,打印需求各异。我们选择FastReport.Net作为主要的打印解决方案,尽管其商业版本需付费,但企业通常对此投入是值得的。本文讨论的是基于旧版2.0版本的FastReport.Net在Web环境中的静默打印实现,需要注意的是,使用正式产品需购买授权。 实现静默打印的关键在于两步:首先,创建一个包含FastReport打印组件的客户端程序,允许用户下载安装;初次打印时,浏览器会显示提示。其次,在Web应用程序中,设计打印功能接口并提供数据传递。源码中将详细展示这两个步骤的代码实现。 以下是客户端打印程序的简化版源码示例:FastReport浏览器直接打印无须预览终版