`
tomqyp
  • 浏览: 25685 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用运行时性能分析功能调试程序

阅读更多

试用一个开源程序,发现程序在一些特定情况会陷入死循环,这种情况下没有调试工具仅凭契约和单元测试也很难找出原因,何况程序本身没有这样的代码,大范围修改也不方便,突然想到用性能分析功能也许可以很容易找到有问题的函数,试了一下没想到性能分析只有在正常退出时才有输出,强行退出并没有结果。

看了一下trace的代码,发现trace的初始化和结果输出分别是在构造和解构中自动调用的,强退时应该没有调用解构所以没有输出,只要在退出于调用一下输出函数应该就行了,于是试着写了一个小测试。

java 代码
  1. extern (C)   
  2. {   
  3.     void trace_term();   
  4.     void signal(int,void function(int));   
  5.     alias void function(int) SigHander;   
  6.     void onExit(int n)   
  7.     {   
  8.         trace_term();   
  9.     }   
  10. }   
  11.   
  12. int foo1(int i)   
  13. {   
  14.     return i++;   
  15. }   
  16. int foo2(int i)   
  17. {   
  18.     return i += 2;   
  19. }   
  20. int main()   
  21. {   
  22.     SigHander sh = &onExit;   
  23.     signal(2,sh);   
  24.     int i=0;   
  25.     while(true)   
  26.     {   
  27.         i=foo1(i);   
  28.         for(int j = 0;j<10;j++) i = foo2(i);   
  29.     }   
  30.  return 0;   
  31. }   
  32.   

运行程序后程序进出死循环,ctrl+c退出,OK有结果了。

如果想方便应该可以直接改phobo或者tango的trace.d文件,不过我试了一下发现windows下并没有把trace编译到phobo中,而是用了dmc的snn.lib,google了一下没找相关的代码,只好就此作罢,linux下的朋友有兴趣可以试试。

 

最后整理了一个,只要把下面代码单独存为一个文件,在程序中import 这个文件就可以了,tango phobos 都适用

extern (C)   
{   
    void trace_term();   
    void signal(int,void function(int));   
    alias void function(int) SigHander;   
    void onExit(int n)   
    {   
        trace_term();   
    }   
}

static this()
{
	signal(2,&onExit);  
}

 

分享到:
评论
3 楼 tomqyp 2007-09-23  
windows下比较麻烦,tango我没测试,不过看了一下也没有编译到tango库中而是编译到了dmd.lib中,这个库不知道在什么情况下链接会引用这个库.而linux下phobo到是编译进了相关的函数,打个小补丁应该就可以了.
2 楼 oldrev 2007-09-23  
用 diff 做个补丁给 tango
1 楼 DavidL 2007-09-23  
思路很有新意。搞定tango,windows就可以分享给大家用了

相关推荐

    论文研究-基于插桩技术的并行程序性能分析方法设计和实现.pdf

    介绍了一种异构环境下的并行调试及性能分析工具...通过对并行程序源代码的分析处理,利用自动插桩模板插入用于调试和性能分析的用户代码,从而对并行程序进行断点调试和性能参数收集,达到进一步优化程序设计的目的。

    利用Splunk做应用程序的性能分析

    对于广大程序员来说,分析日志是一个非常常见,而且繁琐的工作,而且很多时候,必须通过日志来对程序进行调试,例如多线程的情况。记得以前为了几百兆或者几G的日志进行分析,不得不写了logViewer来分析。现在有了...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    由国内著名技术社区联合推荐的2012年IT技术力作:《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》,即将上架发行,此书从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等...

    fortran开发的基本流程.doc

    需求分析:明确科学计算应用的需求和目标,确定所需实现的功能和性能要求。 设计架构:设计科学计算应用的整体架构,包括模块划分、数据结构设计等。 编码实现:根据设计好的架构和需求进行编码实现,采用Fortran...

    基于DSP的数字滤波器设计与仿真(附程序)

    在Matlab中利用滤波器设计、分析工具(FDATool),根据指定的滤波器性能快速设计一个FIR,然后把滤波器系数以头文件形式导人CCS中,头文件中含滤波器阶数和系数数组,在Matlab中调试、运行DSP程序并显示、分析处理后的...

    服务器运行报告模板.doc

    正常 不正常 " "整体检查 "害痕迹 " " " 3、操作系统及应用系统检查 "检查项 "检查操作 "参考标准 "运行状况 " "操作系统启动和运 "加电启动 " " 正常 不正常 " "行状况检查 " " " " "检查系统内存利用 "通过windows...

    GraalVM:在任何地方更快地运行程序-开源

    GraalVM是一种高性能的多语言运行时。 它旨在加速用Java和其他JVM语言编写的应用程序的执行,同时还提供JavaScript,Ruby,Python等的运行时。增加应用程序吞吐量并减少延迟。 将应用程序编译为小型独立的本机二进制...

    Intel.Thread.Profiler.英特尔®.线程档案器

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    Intel.Thread.Profiler.英特尔_.线程档案器3

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    Intel.Thread.Profiler.英特尔_.线程档案器4

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    Intel.Thread.Profiler.英特尔_.线程档案器7

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    Intel.Thread.Profiler.英特尔_.线程档案器6

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    Intel.Thread.Profiler.英特尔_.线程档案器5

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    Intel.Thread.Profiler.英特尔_.线程档案器10

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    Intel.Thread.Profiler.英特尔_.线程档案器8

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    Intel.Thread.Profiler.英特尔_.线程档案器9

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

    go-metrics:Golang库,用于将性能和运行时指标导出到外部指标系统(即statsite,statsd)

    该库提供了一个metrics程序包,可用于灵活地检测代码,公开应用程序度量标准和分析运行时性能。 当前的API: 水槽 metrics包利用MetricSink接口来支持向任何类型的后端的传递。 当前提供以下接收器: StatsiteSink...

    进程控制与描述代码

    利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。

    Intel.Thread.Profiler.英特尔_.线程档案器11

    更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 &lt;br&gt;特性 &lt;br&gt;虚拟化线程应用程序行为: &lt;br&gt;●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...

Global site tag (gtag.js) - Google Analytics