`
tomqyp
  • 浏览: 26147 次
  • 性别: 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就可以分享给大家用了

相关推荐

    Intouch实用调试程序

    通过阅读这份文档,用户可以学习如何高效地利用这些资源进行Intouch系统调试,包括如何打开和运行调试程序,如何查找和修改标签值,以及如何监视和记录测点数据。 总的来说,"Intouch实用调试程序"是一套工具,它...

    山外多功能调试助手

    总的来说,“山外多功能调试助手”是一款功能全面、性能稳定、操作简便的调试工具,无论是在嵌入式系统开发,还是在网络应用程序调试中,都是一款值得信赖的伙伴。掌握并熟练使用这款工具,无疑将极大地提高我们的...

    28335CAN调试程序

    《TMS320F28335的CAN调试程序详解》 在现代工业自动化领域,控制器局域网络(Controller Area Network,简称CAN)通信协议因其高效、可靠的特性而广泛应用。TMS320F28335是德州仪器(Texas Instruments,TI)推出的...

    VMP分析插件调试VM

    在这个场景中,"VMP分析插件调试VM"的标题和描述暗示我们将讨论如何利用特定的分析插件来调试在VMP环境中运行的虚拟机(VM)。 调试虚拟机对于开发者和IT专业人员来说是一项关键任务,因为它可以帮助识别和解决问题...

    TCP通讯调试程序.rar_TCP通讯调试模拟程序_ready8gw_slabsiuu_tcp调试程序

    总的来说,TCP通讯调试程序是一个学习和解决TCP通信问题的实用工具,它涵盖了TCP连接建立、数据传输、连接关闭等关键流程,并可能利用特定的库进行性能优化和错误处理。通过分析和使用这款程序,开发者能深入理解TCP...

    博创多功能调试器驱动win7系统32位

    博创公司可能是一家专注于电子工程、软件开发或嵌入式系统领域的技术企业,其多功能调试器是一种通用性极强的硬件工具,可用于多种调试任务,如芯片级调试、代码调试、系统性能分析等。对于开发者来说,这样的调试器...

    《AIX5.3通用编程概念:编写并调试程序》

    根据提供的标题、描述以及部分文档内容,我们可以提炼出与AIX 5.3操作系统相关的编程概念及调试程序的重要知识点。 ### AIX 5.3通用编程概念 #### 1. **AIX 5.3系统简介** - AIX 5.3是IBM开发的一款基于UNIX的...

    用 GDB 调试程序

    ### 使用GDB调试程序:深入理解与实践 #### 引言 GDB(GNU Debugger)是Linux系统下的一款强大而全面的调试工具,主要用于调试C和C++编写的程序。通过GDB,开发者可以在程序运行时监控其内部状态,包括变量的值、...

    Oprofile 0.9.4 程序性能分析必备工具

    0.9.4版本是该工具的一个稳定发行版,提供了丰富的功能,帮助开发者深入了解程序运行时的行为,找出性能瓶颈,从而进行针对性的优化。 Oprofile的核心功能包括: 1. **CPU事件采样**:Oprofile能够监控CPU的各种...

    USB调试助手(单片机多功能调试助手)

    6. **性能分析**:可以监控CPU利用率、内存使用情况等,为优化代码提供依据。 7. **固件更新**:在产品部署后,可以通过USB调试助手远程更新固件,实现设备的在线升级。 使用USB调试助手时,开发者需要注意以下几...

    M语言调试运行库

    5. **性能分析**:部分调试库还提供了性能分析工具,用于评估代码的运行效率,找出性能瓶颈。 6. **调用堆栈查看**:当程序崩溃或出现异常时,查看调用堆栈可以帮助我们了解问题出在哪里,以及如何回溯到引发问题的...

    实用 dbx 调试程序

    - **性能监控**:使用 `dbx` 的性能监控工具来分析程序的运行效率。 #### 10. 修复并继续 - **修复错误后重新执行**:在解决了调试过程中发现的问题后,可以重新加载程序并继续执行。 - **保存和恢复调试运行**:...

    程序调试工具

    8. **性能分析**:部分高级调试工具还提供了性能分析功能,如CPU和内存使用情况的实时监控,帮助优化代码性能。 9. **多线程调试**:在多线程环境中,调试工具可以帮助跟踪各个线程的状态,理解并发问题。 10. **...

    vs2015运行时

    9. **调试与优化工具**:VS2015运行时包含了调试和性能分析工具,帮助开发者定位和优化代码,提高程序的效率和稳定性。 总之,Visual Studio 2015运行时是开发和运行基于VS2015环境的程序所必需的基础设施,它为...

    Windows 调试程序 (WinDbg)

    **Windows调试程序(WinDbg)** WinDbg是一款强大的调试工具,由Microsoft提供,用于对Windows操作系统进行内核模式和用户模式的调试。这款工具是Windows开发和故障排除过程中的得力助手,尤其在处理崩溃、性能问题或...

    用GDB调试程序

    ### GDB调试程序详解 #### GDB:强大的UNIX下的程序调试工具 GDB,全称为GNU Debugger,是由GNU开源组织发布的强大程序调试工具,专为UNIX及类UNIX系统设计。与常见的图形界面调试器如VC、BCB相比,GDB在某些方面...

    程序调试器 易语言版

    对于希望进一步提升调试技能的开发者,可以深入学习如何利用调试器进行内存泄漏检测、性能分析,甚至配合其他工具进行复杂问题的诊断。通过不断实践和学习,我们可以更好地驾驭易语言版程序调试器,为软件开发之路...

    Android 程序调试技术学习

    性能调试是另一个重要的方面。例如,使用Systrace工具可以跟踪系统服务和应用的CPU活动,以识别可能导致性能下降的代码段。另外,内存泄漏是Android应用常见的问题,可以使用Memory Profiler工具检测内存分配和释放...

    UNIX性能调试

    在UNIX系统中,性能调试是确保系统高效稳定运行的关键环节。这一主题涵盖了多个方面,包括性能分析准则、使用的工具以及不同资源的性能分析。 首先,性能分析准则涉及到系统性能管理,其中有两个主要衡量标准:响应...

Global site tag (gtag.js) - Google Analytics