CN106776304A - 基于嵌入式Linux下多线程开发中控制打印输出信息的方法 - Google Patents

基于嵌入式Linux下多线程开发中控制打印输出信息的方法 Download PDF

Info

Publication number
CN106776304A
CN106776304A CN201611100587.9A CN201611100587A CN106776304A CN 106776304 A CN106776304 A CN 106776304A CN 201611100587 A CN201611100587 A CN 201611100587A CN 106776304 A CN106776304 A CN 106776304A
Authority
CN
China
Prior art keywords
thread
printf
linux
print control
type information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201611100587.9A
Other languages
English (en)
Inventor
李旭升
孙明刚
刘世和
莫家年
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cloud Bird (shanghai) Energy Technology Co Ltd
Original Assignee
Cloud Bird (shanghai) Energy Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Cloud Bird (shanghai) Energy Technology Co Ltd filed Critical Cloud Bird (shanghai) Energy Technology Co Ltd
Priority to CN201611100587.9A priority Critical patent/CN106776304A/zh
Publication of CN106776304A publication Critical patent/CN106776304A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明的基于嵌入式Linux下多线程开发中控制打印输出信息的方法,包括:a).创建打印控制文件,用于接收和存储待打印线程名称;b).创建记录表,用于存储线程ID和线程名称;c).定义全局字符指针p,将打印控制文件映射到全局字符指针p;d).重新实现printf函数;e).输出打印信息。本发明提出了一种嵌入式Linux下C语言开发中动态控制打印信息输出的方法,该方法在保持使用习惯与C标准printf函数相同的情况下,重新实现了printf函数;程序运行时,只需要在打印控制文件中输入待打印的线程名称,就可以实现动态控制打印信息输出的功能。该方法方便快捷,节省了为控制打印信息输出而重新修改、编译代码的时间,有效提高了调试效率和开发效率。

Description

基于嵌入式Linux下多线程开发中控制打印输出信息的方法
技术领域
本发明涉及一种基于嵌入式Linux下多线程开发中控制打印输出信息的方法,更具体的说,尤其涉及一种的基于嵌入式Linux下多线程开发中控制打印输出信息的方法。
背景技术
目前嵌入式Linux下C语言开发调试过程中,为了便于跟踪问题,对于代码关键变量值的查看,报文的输出等,通常会调用printf函数打印信息进行调试跟踪。但当printf函数用于多个线程中,而开发人员需要屏蔽某些线程的printf调试信息输出时,只能修改代码,将相应的printf函数删除或注释掉或用宏定义屏蔽掉,然后再重新编译、运行程序,比较繁琐;而且一旦printf函数在多线程中使用数量很多时,这个弊端就更加明显,它会浪费开发人员大量的时间,用在写printf函数和注释printf函数上面,严重降低了开发效率。
发明内容
本发明为了克服上述技术问题的缺点,提供了一种的基于嵌入式Linux下多线程开发中控制打印输出信息的方法。
本发明的基于嵌入式Linux下多线程开发中控制打印输出信息的方法,其特征在于,通过以下步骤来实现:
a).创建打印控制文件,创建用于接收和存储待打印线程名称的打印控制文件,Linux***运行以后,调试人员使用echo命令向该打印控制文件写入预打印的线程名称;
b).创建记录表,创建用于存储线程ID和线程名称的记录表,每当有线程发起时,首先判断该线程名称在记录表中是否已存在,如果已经存在,则将该名称对应的ID更新;如果不存在,则将线程名称和线程ID同时存入记录表;
c).定义全局字符指针p,使用内存映射函数mmap,将步骤a)中存储有待打印线程名称的打印控制文件映射到全局字符指针p;
d).重新实现printf函数,采用与printf不同的字符重新定义一个打印函数,并使重新定义的打印函数的入参与标准printf函数的入参相同;然后再通过宏定义,将标准printf替换为重新定义的打印函数的名称,以达到在使用重新定义的打印函数时与标准printf函数具有相同的接口和效果;
e).输出打印信息,在Linux***下,利用重新定义的打印函数打印信息时,所有线程均获取本线程的ID,并根据ID查找步骤a)中记录表中对应的线程名称,然后查找步骤c)中全局字符指针p指向的内存中是否含有本线程名称,如果有则将信息打印输出,如果没有则退出或返回。
本发明的基于嵌入式Linux下多线程开发中控制打印输出信息的方法,步骤a)中定义的打印控制文件的名称和地址可以为:/home/printfctl,使用echo命令向该打印控制文件输出预打印线程名称格式为:如echo "taskname1" > /home/printfctl,以允许线程名称为taskname1的线程打印信息,通过echo "taskname N“ >> /home/printfctl增加名称为tasknameN的线程输出打印信息。
本发明的有益效果是:本发明的基于嵌入式Linux下多线程开发中控制打印输出信息的方法,提出了一种嵌入式Linux下C语言开发中动态控制打印信息输出的方法,该方法在保持使用习惯与C标准printf函数相同的情况下,重新实现了printf函数;程序运行时,只需要在打印控制文件中输入待打印的线程名称,就可以实现动态控制打印信息输出的功能。该方法方便快捷,节省了为控制打印信息输出而重新修改、编译代码的时间,有效提高了调试效率和开发效率。
附图说明
图1为本发明的基于嵌入式Linux下多线程开发中控制打印输出信息的方法流程图。
具体实施方式
下面结合附图与实施例对本发明作进一步说明。
如图1所示,给出了本发明的基于嵌入式Linux下多线程开发中控制打印输出信息的方法流程图,其通过以下步骤来实现:
a).创建打印控制文件,创建用于接收和存储待打印线程名称的打印控制文件,Linux***运行以后,调试人员使用echo命令向该打印控制文件写入预打印的线程名称;
例如,定义的打印控制文件的名称和地址可以为:/home/printfctl,使用echo命令向该打印控制文件输出预打印线程名称格式为:如echo "taskname1" > /home/printfctl,以允许线程名称为taskname1的线程打印信息,通过echo "taskname N“ >> /home/printfctl增加名称为tasknameN的线程输出打印信息。
b).创建记录表,创建用于存储线程ID和线程名称的记录表,每当有线程发起时,首先判断该线程名称在记录表中是否已存在,如果已经存在,则将该名称对应的ID更新;如果不存在,则将线程名称和线程ID同时存入记录表;
Linux中没有线程名称的概念,只有线程ID,计算机***方便识别pid,而人类方便使用线程名称,如果使用线程ID一是不好记忆,二是线程ID每次程序启动都是动态的;故引入记录表以方便操作线程。
c).定义全局字符指针p,使用内存映射函数mmap,将步骤a)中存储有待打印线程名称的打印控制文件映射到全局字符指针p;
d).重新实现printf函数,采用与printf不同的字符重新定义一个打印函数,并使重新定义的打印函数的入参与标准printf函数的入参相同;然后再通过宏定义,将标准printf替换为重新定义的打印函数的名称,以达到在使用重新定义的打印函数时与标准printf函数具有相同的接口和效果;
e).输出打印信息,在Linux***下,利用重新定义的打印函数打印信息时,所有线程均获取本线程的ID,并根据ID查找步骤a)中记录表中对应的线程名称,然后查找步骤c)中全局字符指针p指向的内存中是否含有本线程名称,如果有则将信息打印输出,如果没有则退出或返回。
运行过程中如果需要查看某个线程的关键数据,可使用echo命令向步骤1中定义的文件写入线程名称;例如:如果只是想查看一个线程的信息可以使用如下命令echo "taskname1" > /home/printoption,如果想查看多个线程信息可以使用追加的方式加入如echo "tasknameN" >> /home/printoption。
本发明的基于嵌入式Linux下多线程开发中控制打印输出信息的方法有益效果体现在:
本发明的有益效果如下:
(1)、通过在打印控制文件写入一个或多个不同的线程名称、任务名称,可控制某个或某几个线程进行打印信息输出;可以在程序运行的任意时刻,改变控信息来动态调整打印信息输出。
(2)、可以使得调试工作变得非常高效,有效提高软件开发效率。
(3)、发布程序时,可以将printf语句保留在程序代码中,不必删除。
(4)、现场终端需要进行故障排查时,可以采用此方式来查看终端运行中的相关信息,便于快速定位故障源,提高问题排查效率。
(5)、现场运行出现问题时,可以做到保留现场,查看信息,而不需要破坏现场重新运行程序。

Claims (2)

1.一种基于嵌入式Linux下多线程开发中控制打印输出信息的方法,其特征在于,通过以下步骤来实现:
a).创建打印控制文件,创建用于接收和存储待打印线程名称的打印控制文件,Linux***运行以后,调试人员使用echo命令向该打印控制文件写入预打印的线程名称;
b).创建记录表,创建用于存储线程ID和线程名称的记录表,每当有线程发起时,首先判断该线程名称在记录表中是否已存在,如果已经存在,则将该名称对应的ID更新;如果不存在,则将线程名称和线程ID同时存入记录表;
c).定义全局字符指针p,使用内存映射函数mmap,将步骤a)中存储有待打印线程名称的打印控制文件映射到全局字符指针p;
d).重新实现printf函数,采用与printf不同的字符重新定义一个打印函数,并使重新定义的打印函数的入参与标准printf函数的入参相同;然后再通过宏定义,将标准printf替换为重新定义的打印函数的名称,以达到在使用重新定义的打印函数时与标准printf函数具有相同的接口和效果;
e).输出打印信息,在Linux***下,利用重新定义的打印函数打印信息时,所有线程均获取本线程的ID,并根据ID查找步骤a)中记录表中对应的线程名称,然后查找步骤c)中全局字符指针p指向的内存中是否含有本线程名称,如果有则将信息打印输出,如果没有则退出或返回。
2.根据权利要求1所述的基于嵌入式Linux下多线程开发中控制打印输出信息的方法,其特征在于:步骤a)中定义的打印控制文件的名称和地址可以为:/home/printfctl,使用echo命令向该打印控制文件输出预打印线程名称格式为:如echo "taskname1" > /home/printfctl,以允许线程名称为taskname1的线程打印信息,通过echo "taskname N“ >> /home/printfctl增加名称为tasknameN的线程输出打印信息。
CN201611100587.9A 2016-12-05 2016-12-05 基于嵌入式Linux下多线程开发中控制打印输出信息的方法 Pending CN106776304A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611100587.9A CN106776304A (zh) 2016-12-05 2016-12-05 基于嵌入式Linux下多线程开发中控制打印输出信息的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611100587.9A CN106776304A (zh) 2016-12-05 2016-12-05 基于嵌入式Linux下多线程开发中控制打印输出信息的方法

Publications (1)

Publication Number Publication Date
CN106776304A true CN106776304A (zh) 2017-05-31

Family

ID=58883481

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611100587.9A Pending CN106776304A (zh) 2016-12-05 2016-12-05 基于嵌入式Linux下多线程开发中控制打印输出信息的方法

Country Status (1)

Country Link
CN (1) CN106776304A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107656868A (zh) * 2017-09-18 2018-02-02 上海斐讯数据通信技术有限公司 一种利用线程私有数据获取线程名字的调试方法及***
CN112486424A (zh) * 2019-09-12 2021-03-12 无锡江南计算技术研究所 用户透明的运算核并行打印保序代理方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5325530A (en) * 1993-01-29 1994-06-28 International Business Machines Corporation Controller for sequential programming tools executed in a parallel computing environment
CN101515251A (zh) * 2009-03-31 2009-08-26 华为技术有限公司 板级平台调试方法、装置和***
CN101916223A (zh) * 2010-08-11 2010-12-15 无锡中星微电子有限公司 程序调试方法及***
CN105260315A (zh) * 2015-11-13 2016-01-20 上海斐讯数据通信技术有限公司 一种在嵌入式***进程中调试日志的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5325530A (en) * 1993-01-29 1994-06-28 International Business Machines Corporation Controller for sequential programming tools executed in a parallel computing environment
CN101515251A (zh) * 2009-03-31 2009-08-26 华为技术有限公司 板级平台调试方法、装置和***
CN101916223A (zh) * 2010-08-11 2010-12-15 无锡中星微电子有限公司 程序调试方法及***
CN105260315A (zh) * 2015-11-13 2016-01-20 上海斐讯数据通信技术有限公司 一种在嵌入式***进程中调试日志的方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107656868A (zh) * 2017-09-18 2018-02-02 上海斐讯数据通信技术有限公司 一种利用线程私有数据获取线程名字的调试方法及***
CN112486424A (zh) * 2019-09-12 2021-03-12 无锡江南计算技术研究所 用户透明的运算核并行打印保序代理方法
CN112486424B (zh) * 2019-09-12 2022-10-04 无锡江南计算技术研究所 用户透明的运算核并行打印保序代理方法

Similar Documents

Publication Publication Date Title
CN109086199B (zh) 一种自动化生成测试脚本的方法、终端和可存储介质
CN103473045A (zh) 一种生成接口文档的方法及装置
US20140222766A1 (en) System and method for database migration and validation
CN111177113B (zh) 数据迁移方法、装置、计算机设备和存储介质
CN110688145B (zh) Android MVP代码自动生成方法、装置、介质、电子设备
CN108776702A (zh) 一种数据填报页面自定义可视化配置方法
CN103309849B (zh) 一种基于OpenXML的docx文档创建和修改方法
CN108256716A (zh) 基于表来配置/执行流程和/或原子流程的方法和设备
CN106776304A (zh) 基于嵌入式Linux下多线程开发中控制打印输出信息的方法
CN106407172A (zh) 一种基于xml的报表生成方法
CN115509904A (zh) 一种接口测试用例的断言生成方法及装置
CN106250063A (zh) 一种翻页方法、装置及书写终端
WO2022179122A1 (zh) 基于大数据的数据存储方法、装置、电子设备及存储介质
CN104375814A (zh) 接口文档的生成方法及装置
CN106970758A (zh) 电子文档操作处理方法、装置和电子设备
CN114047970A (zh) 一种autosar架构软件的配置方法及***
CN109614084A (zh) web程序及其快速开发框架、开发方法与相关设备
CN112817592A (zh) 一种基于实体注解的自动代码生成方法
CN107329756A (zh) 程序文件的生成方法、装置、存储介质、处理器和终端
CN108959222A (zh) 表单管理***、书写终端、控制终端、方法、及介质
CN108845857A (zh) 一种基于云平台的图标管理方法和装置
CN111143450B (zh) 导入数据的方法和装置
CN103019801B (zh) 一种应用于高速数字io波形引擎的编译器
CN102880550B (zh) 基于约束校验的内存格式化方法
CN109117422B (zh) 一种大规模高并发***中全局唯一号码快速生成方法及***

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170531

WD01 Invention patent application deemed withdrawn after publication