试用一个开源程序,发现程序在一些特定情况会陷入死循环,这种情况下没有调试工具仅凭契约和单元测试也很难找出原因,何况程序本身没有这样的代码,大范围修改也不方便,突然想到用性能分析功能也许可以很容易找到有问题的函数,试了一下没想到性能分析只有在正常退出时才有输出,强行退出并没有结果。
看了一下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);
}
分享到:
相关推荐
通过阅读这份文档,用户可以学习如何高效地利用这些资源进行Intouch系统调试,包括如何打开和运行调试程序,如何查找和修改标签值,以及如何监视和记录测点数据。 总的来说,"Intouch实用调试程序"是一套工具,它...
在这个场景中,"VMP分析插件调试VM"的标题和描述暗示我们将讨论如何利用特定的分析插件来调试在VMP环境中运行的虚拟机(VM)。 调试虚拟机对于开发者和IT专业人员来说是一项关键任务,因为它可以帮助识别和解决问题...
总的来说,“山外多功能调试助手”是一款功能全面、性能稳定、操作简便的调试工具,无论是在嵌入式系统开发,还是在网络应用程序调试中,都是一款值得信赖的伙伴。掌握并熟练使用这款工具,无疑将极大地提高我们的...
《TMS320F28335的CAN调试程序详解》 在现代工业自动化领域,控制器局域网络(Controller Area Network,简称CAN)通信协议因其高效、可靠的特性而广泛应用。TMS320F28335是德州仪器(Texas Instruments,TI)推出的...
总的来说,TCP通讯调试程序是一个学习和解决TCP通信问题的实用工具,它涵盖了TCP连接建立、数据传输、连接关闭等关键流程,并可能利用特定的库进行性能优化和错误处理。通过分析和使用这款程序,开发者能深入理解TCP...
博创公司可能是一家专注于电子工程、软件开发或嵌入式系统领域的技术企业,其多功能调试器是一种通用性极强的硬件工具,可用于多种调试任务,如芯片级调试、代码调试、系统性能分析等。对于开发者来说,这样的调试器...
根据提供的标题、描述以及部分文档内容,我们可以提炼出与AIX 5.3操作系统相关的编程概念及调试程序的重要知识点。 ### AIX 5.3通用编程概念 #### 1. **AIX 5.3系统简介** - AIX 5.3是IBM开发的一款基于UNIX的...
### 使用GDB调试程序:深入理解与实践 #### 引言 GDB(GNU Debugger)是Linux系统下的一款强大而全面的调试工具,主要用于调试C和C++编写的程序。通过GDB,开发者可以在程序运行时监控其内部状态,包括变量的值、...
0.9.4版本是该工具的一个稳定发行版,提供了丰富的功能,帮助开发者深入了解程序运行时的行为,找出性能瓶颈,从而进行针对性的优化。 Oprofile的核心功能包括: 1. **CPU事件采样**:Oprofile能够监控CPU的各种...
6. **性能分析**:可以监控CPU利用率、内存使用情况等,为优化代码提供依据。 7. **固件更新**:在产品部署后,可以通过USB调试助手远程更新固件,实现设备的在线升级。 使用USB调试助手时,开发者需要注意以下几...
5. **性能分析**:部分调试库还提供了性能分析工具,用于评估代码的运行效率,找出性能瓶颈。 6. **调用堆栈查看**:当程序崩溃或出现异常时,查看调用堆栈可以帮助我们了解问题出在哪里,以及如何回溯到引发问题的...
- **错误定位**:利用程序流分析等功能快速定位程序中的逻辑错误或运行时错误。 - **多系统比较**:对于部署在多个环境中的相同程序,可以通过跨系统分析发现不同环境间的差异,从而解决问题。 总之,ABAP高级调试...
- **性能监控**:使用 `dbx` 的性能监控工具来分析程序的运行效率。 #### 10. 修复并继续 - **修复错误后重新执行**:在解决了调试过程中发现的问题后,可以重新加载程序并继续执行。 - **保存和恢复调试运行**:...
8. **性能分析**:部分高级调试工具还提供了性能分析功能,如CPU和内存使用情况的实时监控,帮助优化代码性能。 9. **多线程调试**:在多线程环境中,调试工具可以帮助跟踪各个线程的状态,理解并发问题。 10. **...
**Windows调试程序(WinDbg)** WinDbg是一款强大的调试工具,由Microsoft提供,用于对Windows操作系统进行内核模式和用户模式的调试。这款工具是Windows开发和故障排除过程中的得力助手,尤其在处理崩溃、性能问题或...
### GDB调试程序详解 #### GDB:强大的UNIX下的程序调试工具 GDB,全称为GNU Debugger,是由GNU开源组织发布的强大程序调试工具,专为UNIX及类UNIX系统设计。与常见的图形界面调试器如VC、BCB相比,GDB在某些方面...
对于希望进一步提升调试技能的开发者,可以深入学习如何利用调试器进行内存泄漏检测、性能分析,甚至配合其他工具进行复杂问题的诊断。通过不断实践和学习,我们可以更好地驾驭易语言版程序调试器,为软件开发之路...
性能调试是另一个重要的方面。例如,使用Systrace工具可以跟踪系统服务和应用的CPU活动,以识别可能导致性能下降的代码段。另外,内存泄漏是Android应用常见的问题,可以使用Memory Profiler工具检测内存分配和释放...
在UNIX系统中,性能调试是确保系统高效稳定运行的关键环节。这一主题涵盖了多个方面,包括性能分析准则、使用的工具以及不同资源的性能分析。 首先,性能分析准则涉及到系统性能管理,其中有两个主要衡量标准:响应...
11. strace:追踪系统调用和信号,可用于调试程序或分析性能问题。 12. ulimit:控制系统资源的使用限制,如打开文件的最大数量。 13. mpstat:显示每个可用CPU的统计信息,适合多处理器系统性能分析。 性能测试...