试用一个开源程序,发现程序在一些特定情况会陷入死循环,这种情况下没有调试工具仅凭契约和单元测试也很难找出原因,何况程序本身没有这样的代码,大范围修改也不方便,突然想到用性能分析功能也许可以很容易找到有问题的函数,试了一下没想到性能分析只有在正常退出时才有输出,强行退出并没有结果。
看了一下trace的代码,发现trace的初始化和结果输出分别是在构造和解构中自动调用的,强退时应该没有调用解构所以没有输出,只要在退出于调用一下输出函数应该就行了,于是试着写了一个小测试。
java 代码
- extern (C)
- {
- void trace_term();
- void signal(int,void function(int));
- alias void function(int) SigHander;
- void onExit(int n)
- {
- trace_term();
- }
- }
-
- int foo1(int i)
- {
- return i++;
- }
- int foo2(int i)
- {
- return i += 2;
- }
- int main()
- {
- SigHander sh = &onExit;
- signal(2,sh);
- int i=0;
- while(true)
- {
- i=foo1(i);
- for(int j = 0;j<10;j++) i = foo2(i);
- }
- return 0;
- }
-
运行程序后程序进出死循环,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);
}
分享到:
相关推荐
介绍了一种异构环境下的并行调试及性能分析工具...通过对并行程序源代码的分析处理,利用自动插桩模板插入用于调试和性能分析的用户代码,从而对并行程序进行断点调试和性能参数收集,达到进一步优化程序设计的目的。
对于广大程序员来说,分析日志是一个非常常见,而且繁琐的工作,而且很多时候,必须通过日志来对程序进行调试,例如多线程的情况。记得以前为了几百兆或者几G的日志进行分析,不得不写了logViewer来分析。现在有了...
由国内著名技术社区联合推荐的2012年IT技术力作:《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》,即将上架发行,此书从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等...
需求分析:明确科学计算应用的需求和目标,确定所需实现的功能和性能要求。 设计架构:设计科学计算应用的整体架构,包括模块划分、数据结构设计等。 编码实现:根据设计好的架构和需求进行编码实现,采用Fortran...
在Matlab中利用滤波器设计、分析工具(FDATool),根据指定的滤波器性能快速设计一个FIR,然后把滤波器系数以头文件形式导人CCS中,头文件中含滤波器阶数和系数数组,在Matlab中调试、运行DSP程序并显示、分析处理后的...
正常 不正常 " "整体检查 "害痕迹 " " " 3、操作系统及应用系统检查 "检查项 "检查操作 "参考标准 "运行状况 " "操作系统启动和运 "加电启动 " " 正常 不正常 " "行状况检查 " " " " "检查系统内存利用 "通过windows...
GraalVM是一种高性能的多语言运行时。 它旨在加速用Java和其他JVM语言编写的应用程序的执行,同时还提供JavaScript,Ruby,Python等的运行时。增加应用程序吞吐量并减少延迟。 将应用程序编译为小型独立的本机二进制...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...
该库提供了一个metrics程序包,可用于灵活地检测代码,公开应用程序度量标准和分析运行时性能。 当前的API: 水槽 metrics包利用MetricSink接口来支持向任何类型的后端的传递。 当前提供以下接收器: StatsiteSink...
利用Windows提供的API函数,编写程序,实现进程的创建和终止(如创建写字板进程及终止该进程),加深对操作系统进程概念的理解,观察操作系统进程运行的动态性能,获得包含多进程的应用程序编程经验。
更加完整的性能调试解决方案随 VTune™ 性能分析器 Windows 版提供。 <br>特性 <br>虚拟化线程应用程序行为: <br>●时间轴视图可帮助理解线程正在执行的操作以及线程之间的交互。 ●在调用堆栈和源代码...