b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

动态函数调用跟踪方法

电脑杂谈  发布时间:2020-05-19 03:12:48  来源:网络整理

动态调用webservice的方法_python方法调用方法_动态方法调用 为什么不安全

在上学期间,我研究了软件执行网络的动态拓扑特征,并尝试了一些在功能粒度上可行的网络构建方法. 总结一下,我觉得分析开源软件代码很有帮助. 废话不多,主要分为c / c ++和java:

(1)基于Gnu / Gprof运行时分析工具

Gnu / Gprof是用于类Unix平台下的c / c ++开源项目的配置文件分析工具. 它可以记录程序运行期间功能之间的调用关系,每个功能被调用的次数以及每个功能的使用情况(例如时间). 它的实现原理是在编译和链接源程序时在gcc编译器的命令行参数中添加“ -pg”调试选项,并且gcc编译器会在程序的每个函数中添加一个名为“ mcout”的名称(或“ _mcount”,具体取决于编译器或操作系统的功能),此函数将函数调用图保存在内存中,并且可以使用函数调用堆栈的形式来查找子函数的地址和获取父函数的地址函数之间的调用关系,以及每个函数的调用次数,运行时间和其他信息.

下面给出了一个小示例,说明如何在程序运行期间使用Gnu / Gprof工具跟踪函数调用. 源程序文件名为test.c,其内容如下.

[步骤1]使用gcc编译器的-pg选项编译和链接源程序,然后输入以下命令:

动态方法调用 为什么不安全_python方法调用方法_动态调用webservice的方法

test.c文件存储在路径/ home / test中. 运行该命令后,将在此路径下生成一个默认名称为“ a.out”的可执行文件. 当然,您也可以使用-o选项指定可执行文件的文件名. 如上所示,此示例的调试和编译非常简单动态方法调用 为什么不安全,但是编译包含数千个源文件的大型开源项目则相对复杂. 首先,您需要输入项目主文件,然后输入“ ./configure”命令进行编译和检查配置,然后输入“ make CFLAGS = -pg LDFLAGS = -pg”进行编译,最后输入“ make install”来安装项目. 其中CFLAGS和LDFLAGLS分别是编译和链接标志,它们需要添加-pg选项,否则可能无法跟踪成功.

[步骤2]执行程序以生成一个名为“ gmon.out”的二进制数据文件,输入以下命令:

除以上结果外,还将在当前目录中生成一个名为“ gmon.out”的文件.

[第3步]使用gprof工具分析在第2步中生成的数据文件,然后输入以下命令:

执行后,分析结果将在控制台上输出. 以下是从中提取的一些详细信息.

动态调用webservice的方法_python方法调用方法_动态方法调用 为什么不安全

Gprof生成的字段信息解释如下:

时间统计信息

函数消耗的时间占所有时间的百分比

累计秒数

函数的累计执行时间(以秒为单位)

自我秒数

动态调用webservice的方法_动态方法调用 为什么不安全_python方法调用方法

函数本身的执行时间(以秒为单位)

函数被调用的次数

自身电话/通话

调用一个函数的平均时间(不包括被调用的函数,以毫秒为单位)

总Ts /通话次数

调用函数的平均时间(包括调用的函数,以毫秒为单位)

“通话”图中的信息

动态调用webservice的方法_动态方法调用 为什么不安全_python方法调用方法

函数消耗的时间占所有时间的百分比

函数本身执行的时间

父函数调用子函数所花费的时间或执行子函数所花费的时间

通话次数

从输出中可以清楚地看到主函数调用b函数,而b函数分别调用a和c函数. 由于示例中的函数仅输出字符串,因此每个函数的经过时间为0.

(2)基于AOP的面向程序的编程

AOP(面向方面​​的编程,面向方面的编程)是OOP(面向对象的编程,面向对象的编程)的补充和改进. OOP引入了封装,连续性和多态性的概念,以建立对象层次结构来模拟公共行为的集合. 当有必要向分散对象引入公共行为时,OOP将变得无能为力. 换句话说,OOP适合于从上到下描述关系,而不适合于从左到右的关系. 例如,日志功能,记录代码需要水平分散在所有对象中,而与每个对象的核心功能无关. OOP中的这些分散的代码会导致大量重复,这不利于模块的重用. 对于这种类型的问题动态方法调用 为什么不安全,AOP是一个很好的解决方案. 它使用“横切”技术切入对象的内部,并将影响多个类的那些公共行为封装到可重用的模块中,即“ Aspect”. 所谓“切入方面”是封装与业务无关的逻辑或职责,而是业务模块通常调用的逻辑或职责,以减少系统的重复代码,减少模块之间的耦合,并促进将来的操作和维护. AOP的典型应用还包括安全控制,性能统计,事务和异常处理.

AspectJ是扩展Java语言并实现上述技术的AOP框架. 它用作Eclipse的插件,以编程方式在Java项目中实现对函数调用的动态跟踪. 具体方法是在开源项目中定义以下“切割平面”.

在自定义方面,入口点与“ com.example”及其子包中的所有公共函数匹配,但不包括“ CallLogger”类和方面本身. 通知“之前”封装了与入口点匹配的每个函数执行之前的逻辑处理,即,将该函数压入堆栈并记录了该函数的调用关系. 匹配功能执行后,通知“之后”执行简单的弹出过程. “ CallLogger”类维护一个堆栈,该堆栈记录函数调用并实现诸如动态生成函数调用关系之类的操作. 有关源代码,请参见附件.

与动态跟踪相比,还有用于功能静态关系的分析工具,例如Cflow,CodeViz(取决于GraphViz),Doxygen等.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-214860-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...