调试工具的调用方法及装置与流程

文档序号:12863692阅读:294来源:国知局
调试工具的调用方法及装置与流程

本发明涉及计算机信息处理技术,尤其涉及一种调试工具的调用方法及装置。



背景技术:

在嵌入式领域中,搭载vxworks操作系统的上位机与作为下位机的处理器共同形成嵌入式系统。其中,处理器中的控制程序用于对现场设备进行控制,上位机通过通信线路与处理器连接,通过vxworks操作系统,使用者能对处理器的控制结果进行监控和对其控制动作进行调整。

vxworks操作系统是由风河公司开发的实时嵌入式操作系统,为了进一步了解处理器中控制程序的运行情况,风河公司还开发了风河调试工具(windriverdebug,wdb),以便于使用者能根据调试结果对控制程序进行调试优化。该调试工具具有在线调试、性能分析、内存泄露分析等多种功能,并且具有图形化的界面,可以极大地提升开发效率。

现有技术中,风河调试工具的源代码经过编译形成的应用程序文件与vxworks操作系统源代码经编译后的目标文件合并在一起,形成vxworks操作系统的镜像文件。上位机开机时,镜像文件会全部加载到上位机内存中的文件存储区,当vxworks操作系统运行时,已选定启动项的操作系统功能对应的目标文件,以及调试工具对应的应用程序文件被上位机的cpu加载到内存中的程序运行区,以便于调用相应的函数,从而实现操作系统功能以及调试功能。但是,由于调试工具的应用程序文件比较大,加载到内存中的程序运行区会占用较多的内存空间,妨碍了vxworks操作系统的运行效率的提升。



技术实现要素:

本发明提供一种调试工具的调用方法及装置,解决了现有调试工具的调用方法会占用较多的内存空间,从而妨碍了vxworks操作系统运行效率提升 的问题。

本发明实施例一方面提供一种调试工具的调用方法,包括:

接收调试工具的应用程序文件的调用命令,所述调试工具为非启动项,且所述应用程序文件位于上位机内存的文件存储区中;

根据所述调用命令将所述应用程序文件加载到所述上位机内存的程序运行区中;

执行所述应用程序文件进行调试。

本发明实施例另一方面提供一种调试工具的调用装置,包括:

第一接收模块,用于接收调试工具的应用程序文件的调用命令,所述调试工具为非启动项,所述应用程序文件位于上位机内存的文件存储区中;

调用模块,用于根据所述调用命令将所述应用程序文件加载到所述上位机内存的程序运行区中;

执行模块,用于执行所述应用程序文件进行调试。

本发明提供的调试工具的调用方法及装置中,调试工具的应用程序文件位于上位机内存的文件存储区中,在操作系统的运行过程中,如果使用者需要使用调试工具时,会接收到使用者发出的应用程序文件的调用命令,并根据该调用命令将应用程序文件加载到上位机内存的程序运行区,然后就能执行应用程序文件进行调试,这使得调试工具的应用程序文件可以在使用者需要的时候才加载到上位机内存的程序运行区,不需要的时候可以不在程序运行区加载该文件,从而节约了内存空间,有利于vxworks操作系统运行效率的提升。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例一提供的调试工具的调用方法的流程图;

图2为本发明实施例二提供的调试工具的调用方法的流程图;

图3为本发明实施例三提供的一种调试工具的调用装置的示意图;

图4为本发明实施例四提供的一种调试工具的调用装置的示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

图1为本发明实施例一提供的调试工具的调用方法的流程图。如图1所示,该调用方法包括如下步骤。

步骤101、接收调试工具的应用程序文件的调用命令,所述调试工具为非启动项且应用程序文件位于上位机内存的文件存储区中。

具体地,该调用方法的执行主体是嵌入式系统中上位机的处理器,该上位机可以是台式机,也可以笔记本电脑,还可以是便携式、可移动的掌上电脑。

上位机具有内存,内存与处理器连接,内存包括文件存储区和程序运行区。其中,文件存储区存放处理器在运行过程中经常会用到的数据、文件,程序运行区存放处理器正在运行的程序代码和中间运算结果。

上位机开机时,其内存的文件存储区中加载了操作系统镜像文件。vxworks操作系统运行前,可以通过工具软件来设置启动项,被选定的启动项的操作系统功能对应的目标文件会在操作系统运行时被加载到上位机内存的程序运行区。这样,通过处理器运行程序运行区中文件的对应不同功能的函数,就能实现操作系统的不同功能。例如,在操作系统界面上双击一个文件夹就能运行一个函数,从而实现打开这个文件夹,并看到其中内容的功能。其中的工具软件为现有技术,在此不再赘述。

本实施例中,应用程序文件仅位于上位机内存的文件存储区,而未载入到程序运行区,这可以通过工具软件来设置操作系统的启动项,选择不启动调试工具,即调试工具为非启动项,则调试工具的应用程序文件仅会加载到上位机内存的文件存储区,而不会加载到内存的程序运行区。

调试工具的应用程序文件包含调试工具函数,运行不同的函数,能实现调试工具的不同调试功能。本实施例提供的调用方法中应用程序文件一开始是存放在上位机内存的文件存储区中,而不是随已选定启动项的操作系统目标文件一起加载到上位机内存的程序存储区中。在使用者需要使用调试工具时,会发出调用命令,用于调用调试工具的应用程序文件。使用者泛指使用上位机中的操作系统完成一定功能的人。使用者发出调用命令的形式可以是处理器能识别的任何形式,通常为在上位机的操作系统界面上输入一条程序语言,或是选取功能菜单中的一个选项,或是点击一个图标,由此操作产生的调用命令最终会传送给处理器。

步骤102、根据调用命令将应用程序文件加载到上位机内存的程序运行区中。

具体地,处理器接收到调用命令后,会将应用程序文件从上位机内存的文件存储区加载到上位机内存的程序运行区中。应用程序文件在内存中存储的位置通常以地址的形式表示,调用命令中包含应用程序文件的文件名,处理器能根据文件名寻找到应用程序文件存储位置的地址,并将这些地址中存储的内容(即应用程序文件)传送到内存的程序运行区中。

步骤103、执行应用程序文件进行调试。

具体地,应用程序文件中包含调试工具函数,执行该文件时就可以运行调试工具函数,从而进行调试。

本实施例提供的调试工具的调用方法中,调试工具的应用程序文件位于处理器上位机内存的文件存储区中,在操作系统的运行过程中,如果使用者需要使用调试工具时,上位机的处理器会接收到使用者发出的应用程序文件的调用命令,并根据该调用命令将应用程序文件加载到上位机内存的程序运行区,然后就能执行应用程序文件进行调试,这使得调试工具的应用程序文件可以在使用者需要的时候才加载到上位机内存的程序运行区,不需要的时候可以不在程序运行区加载该文件,从而节约了内存空间,有利于vxworks操作系统运行效率的提升。

实施例二

本实施例对上述实施例的调试工具的调用方法做进一步补充说明。图2 为本发明实施例二提供的调试工具的调用方法的流程图。如图2所示,该调用方法包括如下步骤。

步骤201、将未包含调试工具的应用程序文件的操作系统镜像文件加载到上位机内存的程序运行区中。

具体地,该调用方法的执行主体是嵌入式系统中上位机的处理器,该上位机可以是台式机,也可以是笔记本电脑,还可以是便携式、可移动的掌上电脑。

上位机具有内存,内存与处理器连接,内存包括文件存储区和程序运行区。其中,文件存储区存放处理器在运行过程中经常会用到的数据、文件,程序运行区存放处理器正在运行的程序代码和中间运算结果。

上位机开机时,其内存的文件存储区中加载了操作系统镜像文件。vxworks操作系统运行前,可以通过工具软件来设置启动项,被选定的启动项的操作系统功能对应的目标文件会在操作系统运行时被加载到上位机内存的程序运行区。这样,通过处理器运行程序运行区中文件的对应不同功能的函数,就能实现操作系统的不同功能。例如,在操作系统界面上双击一个文件夹就能运行一个函数,从而实现打开这个文件夹,并看到其中内容的功能。其中的工具软件为现有技术,在此不再赘述。

本实施例中,应用程序文件仅位于上位机内存的文件存储区,而未载入到程序运行区,这可以通过工具软件来设置操作系统的启动项,选择不启动调试工具,即调试工具为非启动项,则调试工具的应用程序文件仅会加载到上位机内存的文件存储区,而不会加载到内存的程序运行区,从而节约内存空间。

步骤202、接收调试工具的应用程序文件的调用命令,调试工具为非启动项,且应用程序文件位于上位机内存的文件存储区中。

具体地,调试工具的应用程序文件一开始是存放在上位机内存的文件存储区中,而不是随已选定启动项的操作系统目标文件一起加载到上位机内存的程序运行区中。在使用者需要使用调试工具时,会发出调用命令,用于调用调试工具的应用程序文件。使用者泛指使用上位机中的操作系统完成一定功能的人。使用者发出调用命令的形式可以是处理器能接受的任何形式,通常为在上位机的操作系统界面上输入一条程序语言,或是选取功能菜单中的 一个选项,或是点击一个图标,该命令最终会传送给处理器。

步骤203、根据调用命令将应用程序文件加载到上位机内存的程序运行区中,应用程序文件包括初始化函数文件和调试工具函数库文件。

具体地,处理器接收到调用命令后,会将应用程序文件从上位机内存的文件存储区加载到上位机内存的程序运行区中。应用程序文件在内存中存储的位置通常以地址的形式表示,调用命令中包含应用程序文件的文件名,处理器能根据文件名寻找到应用程序文件存储位置的地址,并将这些地址中存储的内容(即应用程序文件)传送到内存的程序运行区中。

本实施例的应用程序文件包括两部分,分别是初始化函数文件和调试工具函数库文件。其中,初始化是计算机编程中的一个常用术语,指对变量的定义和对函数的声明,以使程序执行时能使用这些变量和函数。本实施例中的应用程序文件包括的初始化函数文件能够对调试工具函数库文件中的变量根据实际需要赋值。根据模块化编程的思想,应用程序在编写源代码的阶段可以将变量的定义和函数的声明部分单独作为一个初始化函数文件,各函数的具体实现单独作为一个调试工具函数库文件。如此设置使得源代码更有条理且便于维护。当然,变量的定义和函数的声明部分也可以调试工具的各函数放在一个文件中。

步骤204、接收调试请求。

具体地,在需要对操作系统的某个功能进行调试时,如内存泄露,使用者会发出对应该调试内容的调试请求。使用者泛指使用上位机中的操作系统完成一定功能的人。使用者发出调用命令的形式可以是处理器能接受的任何形式,通常为在上位机的操作系统界面上输入一条程序语言或是选取功能菜单中的一个选项或是点击一个图标,由此操作产生的调试请求最终会传送给处理器。

步骤205、识别调试请求的类型,若调试请求为系统级调试请求,则执行步骤206,若调试请求为任务级调试请求,执行步骤207。

具体地,不同的调试内容对应不同类型的调试请求,例如下面描述的系统级调试请求或者任务级调试请求,当然本实施例中调试请求的类型并不限于此。

步骤206、执行初始化函数文件,以对调试工具函数库文件中的调试工 具函数初始化。

其中,执行初始化函数文件,以对调试工具函数库文件中的调试工具函数初始化具体可以为:通过运行初始化函数文件中的第一链接方式函数对调试工具函数库文件中的调试工具函数初始化。

根据模块化编程的思想,一个文件中源代码也可以按功能划分成模块,一个模块对应一个函数,便于源代码的维护。对于不同类型的调试请求,初始化函数文件中也对应不同的函数。第一链接方式函数对应系统级调试请求,该函数中包含对应该请求的变量定义和函数声明。若调试请求为系统级调试请求,则执行初始化函数文件时,就会运行初始化函数文件中的第一链接方式函数,第一链接方式函数运行时,对调试工具函数库文件中的调试工具函数初始化,把对应系统级调试请求的调试工具函数进行声明,并定义相应的变量。

该第一链接方式可以是end链接。

步骤207、执行初始化函数文件,以对调试工具函数库文件中的调试工具函数初始化。

其中,执行初始化函数文件,以对调试工具函数库文件中的调试工具函数初始化具体可以为:通过运行初始化函数文件中的第二链接方式函数对调试工具函数库文件中的调试工具函数初始化。

如步骤206所述,对于不同类型的调试请求,初始化函数文件中也对应不同的函数。第二链接方式函数对应任务级调试请求,该函数中包含对应该请求的变量定义和函数声明。若调试请求为任务级调试请求,则执行初始化函数文件时,就会运行初始化函数文件中的第二链接方式函数,第二链接方式函数运行时,对调试工具函数库文件中的调试工具函数初始化,把对应任务级调试请求的调试工具函数进行声明,并定义相应的变量。

该第二链接方式可以是network链接。

步骤208、根据初始化后的调试工具函数进行调试。

具体地,经过初始化后的调试工具函数能够根据调试的需要随时调用,通过函数的功能来完成调试任务。

步骤209、结束调试操作,并释放应用程序文件在程序运行区所占用的内存。

具体地,当调试工作完成时,为了减小内存占用,可以采用该步骤将应用程序文件在程序运行区占用的内存释放掉。等下次再需要进行调试时,再回到步骤201对应用程序文件重新进行加载。

本实施例提供的调试工具的调用方法中,预先在上位机内存的程序运行区中加载未包含调用工具的应用程序文件的操作系统镜像文件,而使调试工具为非启动项,且使调试工具的应用程序文件位于上位机内存的文件存储区中,在操作系统的运行过程中,如果使用者需要使用调试工具时,该方法的执行主体,即上位机的处理器,会接收到使用者发出的应用程序文件的调用命令,并根据该调用命令将应用程序文件加载到上位机内存的程序运行区,然后就能执行应用程序文件进行调试,这使得调试工具的应用程序文件可以在使用者需要的时候才加载到上位机内存的程序运行区,不需要的时候可以不加载该文件到程序运行区,从而节约了内存空间,有利于vxworks操作系统运行效率的提升。

实施例三

本实施例提供一种调试工具的调用装置,用于执行实施例一的调试工具的调用方法。图3为本发明实施例三提供的一种调试工具的调用装置的示意图。

如图3所示,该调用装置包括第一接收模块31、调用模块32和执行模块33。该调用装置可以是台式机的处理器,也可以是笔记本电脑的处理器,还可以是便携式、可移动的掌上电脑的处理器。

上位机具有内存,内存与处理器连接,内存包括文件存储区和程序运行区。其中,文件存储区存放处理器在运行过程中经常会用到的数据、文件,程序运行区存放处理器正在运行的程序代码和中间运算结果。

上位机开机时,其内存的文件存储区中加载了操作系统镜像文件。vxworks操作系统运行前,可以通过工具软件来设置启动项,被选定的启动项的操作系统功能对应的目标文件会在操作系统运行时被加载到上位机内存的程序运行区。这样,通过处理器运行程序运行区中文件的对应不同功能的函数,就能实现操作系统的不同功能。例如,在操作系统界面上双击一个文件夹就能运行一个函数,从而实现打开这个文件夹,并看到其中内容的功能。 其中的工具软件为现有技术,在此不再赘述。

第一接收模块31用于接收调试工具的应用程序文件的调用命令,该调试工具为非启动项,且应用程序文件位于上位机内存的文件存储区中。

调试工具的应用程序文件包含调试工具函数,运行不同的函数,能实现调试工具的不同调试功能。

调用模块32用于根据调用命令将应用程序文件加载到上位机内存的程序运行区中。

本实施例中应用程序文件一开始是存放在上位机内存的文件存储区中,而不是随已选定启动项的操作系统目标文件一起加载到上位机内存的程序存储区中。在使用者需要使用调试工具时,会发出调用命令,用于调用调试工具的应用程序文件。使用者泛指使用上位机中的操作系统完成一定功能的人。使用者发出调用命令的形式可以是处理器能接受的任何形式,通常为在上位机的操作系统界面上输入一条程序语言,或是选取功能菜单中的一个选项,或是点击一个图标,由此操作产生的调用命令最终会传送给第一接收模块31。

应用程序文件在外部存储器中存储的位置通常以地址的形式表示,调用命令中包含应用程序文件的文件名,调用模块32能根据文件名寻找到应用程序文件存储位置的地址,并将这些地址中存储的内容(即应用程序文件)传送到内存中。

执行模块33用于执行应用程序文件进行调试。执行应用程序文件时就可以运行调试工具函数,从而实现调试工具的不同调试功能。

需要说明的是,上述各模块所执行的方法均在和实施例一中进行了详细的描述,在此不再赘述。

本实施例提供的调试工具的调用装置中,调试工具的应用程序文件位于上位机内存的文件存储区中,在操作系统的运行过程中,如果使用者需要使用调试工具时,该调用装置的第一接收模块会接收到使用者发出的应用程序文件的调用命令,并且调用模块根据该调用命令将应用程序文件加载到上位机内存的程序运行区,然后就能利用执行模块来执行应用程序文件以进行调试,这使得调试工具的应用程序文件可以在使用者需要的时候才加载到上位机内存的程序运行区,不需要的时候可以不在程序运行区加载该文件,从而节约了内存空间,有利于vxworks操作系统运行效率的提升。

实施例四

本实施例对实施例三的调试工具的调用装置做进一步补充说明。图4为本发明实施例四提供的一种调试工具的调用装置的示意图。

如图4所示,该调用装置包括第一接收模块41、调用模块42和执行模块43。该调用装置可以是台式机的处理器,也可以是笔记本电脑的处理器,还可以是便携式、可移动的掌上电脑的处理器。

上位机具有内存,内存与处理器连接,内存包括文件存储区和程序运行区。其中,文件存储区存放处理器在运行过程中经常会用到的数据、文件,程序运行区存放处理器正在运行的程序代码和中间运算结果。

上位机开机时,其内存的文件存储区中加载了操作系统镜像文件。vxworks操作系统运行前,可以通过工具软件来设置启动项,被选定的启动项的操作系统功能对应的目标文件会在操作系统运行时被加载到上位机内存的程序运行区。这样,通过处理器运行程序运行区中文件的对应不同功能的函数,就能实现操作系统的不同功能。例如,在操作系统界面上双击一个文件夹就能运行一个函数,从而实现打开这个文件夹,并看到其中内容的功能。其中的工具软件为现有技术,在此不再赘述。

第一接收模块41用于接收调试工具的应用程序文件的调用命令,该调试工具为非启动项,且应用程序文件位于上位机内存的文件存储区中。

调试工具的应用程序文件包含调试工具函数,运行不同的函数,能实现调试工具的不同调试功能。

调用模块42用于根据调用命令将应用程序文件加载到上位机内存的程序运行区中。

本实施例中应用程序文件一开始是存放在上位机内存的文件存储区中,而不是随已选定启动项的操作系统目标文件一起加载到上位机内存的程序存储区中。在使用者需要使用调试工具时,会发出调用命令,用于调用调试工具的应用程序文件。使用者泛指使用上位机中的操作系统完成一定功能的人。使用者发出调用命令的形式可以是处理器能接受的任何形式,通常为在上位机的操作系统界面上输入一条程序语言,或是选取功能菜单中的一个选项,或是点击一个图标,由此操作产生的调用命令最终会传送给第一接收模块41。

应用程序文件在外部存储器中存储的位置通常以地址的形式表示,调用命令中包含应用程序文件的文件名,调用模块42能根据文件名寻找到应用程序文件存储位置的地址,并将这些地址中存储的内容(即应用程序文件)传送到内存中。

执行模块43用于执行应用程序文件进行调试。执行应用程序文件时就可以运行调试工具函数,从而实现调试工具的不同调试功能。

上述应用程序文件可以包括初始化函数文件和调试工具函数库文件。这样,上述的执行模块可以包括:执行子模块431和调试子模块432。

执行子模块431用于执行初始化函数文件,以对调试工具函数库文件中的调试工具函数初始化。

初始化是计算机编程中的一个常用术语,指对变量的定义和对函数的声明,以使程序执行时能使用这些变量和函数。应用程序文件包括初始化函数文件和调试工具函数库文件。根据模块化编程的思想,应用程序在编写源代码的阶段可以将变量的定义和函数的声明部分单独作为一个初始化函数文件,各函数的具体实现单独作为一个调试工具函数库文件。如此设置使得源代码更有条理且便于维护。当然,变量的定义和函数的声明部分也可以调试工具的各函数放在一个文件中。

调试子模块432用于根据初始化后的调试工具函数进行调试。经过初始化后的调试工具函数能够根据调试的需要随时调用,通过函数的功能来完成调试任务。

另外,该调用装置还可以包括第二接收模块44和识别模块45。

第二接收模块44用于接收调试请求。具体地,在需要对操作系统的某个功能进行调试时,如内存泄露,使用者会发出对应该调试内容的调试请求。该调试请求发送给第二接收模块44。

识别模块45用于识别调试请求的类型。不同的调试内容对应不同类型的调试请求,例如下面描述的系统级调试请求或者任务级调试请求。

执行模块43中的执行子模块431用于在调试请求为系统级调试请求时,通过运行初始化函数文件中的第一链接方式函数对调试工具函数库文件中的调试工具函数初始化。

根据模块化编程的思想,一个文件中源代码也可以按功能划分成模块, 一个模块对应一个函数,便于源代码的维护。对于不同类型的调试请求,初始化函数文件中也对应不同的函数。第一链接方式函数对应系统级调试请求,该函数中包含对应该请求的变量定义和函数声明。若调试请求为系统级调试请求,则执行初始化函数文件时,就会运行初始化函数文件中的第一链接方式函数,第一链接方式函数运行时,对调试工具函数库文件中的调试工具函数初始化,把对应系统级调试请求的调试工具函数进行声明,并定义相应的变量。

执行子模块431还用于在调试请求为任务级调试请求,通过运行初始化函数文件中的第二链接方式函数对调试工具函数库文件中的调试工具函数初始化。

第二链接方式函数对应任务级调试请求,该函数中包含对应该请求的变量定义和函数声明。若调试请求为任务级调试请求,则执行初始化函数文件时,就会运行初始化函数文件中的第二链接方式函数,第二链接方式函数运行时,对调试工具函数库文件中的调试工具函数初始化,把对应任务级调试请求的调试工具函数进行声明,并定义相应的变量。

上述的调用装置还可以包括加载模块46,用于将未包含应用程序文件的操作系统镜像文件加载到上位机内存的程序运行区中。

加载到上位机内存的程序运行区中的操作系统镜像文件中未包含应用程序文件,所以能节约内存空间。

释放模块47用于结束调试操作,并释放应用程序文件在程序运行区所占用的内存。

当调试工作完成时,为了减小内存占用,可以利用释放模块47将应用程序文件在程序运行区占用的内存释放掉。等下次再需要进行调试时,再使用调用模块42对应用程序文件重新进行加载。

需要说明的是,上述各模块所执行的方法均在和实施例二中进行了详细的描述,在此不再赘述。

本实施例提供的调试工具的调用装置中,调试工具的应用程序文件位于上位机内存的文件存储区中,在操作系统的运行过程中,如果使用者需要使用调试工具时,该调用装置的第一接收模块会接收到使用者发出的应用程序文件的调用命令,并且调用模块根据该调用命令将应用程序文件加载到上位 机内存的程序运行区,然后就能利用执行模块来执行应用程序文件以进行调试,这使得调试工具的应用程序文件可以在使用者需要的时候才加载到上位机内存的程序运行区,不需要的时候可以不加载该文件到程序运行区,从而节约了内存空间,有利于vxworks操作系统运行效率的提升。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1