2007-09-22
利用运行时性能分析功能调试程序
关键字: 调试 性能分析试用一个开源程序,发现程序在一些特定情况会陷入死循环,这种情况下没有调试工具仅凭契约和单元测试也很难找出原因,何况程序本身没有这样的代码,大范围修改也不方便,突然想到用性能分析功能也许可以很容易找到有问题的函数,试了一下没想到性能分析只有在正常退出时才有输出,强行退出并没有结果。
看了一下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下的朋友有兴趣可以试试。
评论
tomqyp
2007-09-23
windows下比较麻烦,tango我没测试,不过看了一下也没有编译到tango库中而是编译到了dmd.lib中,这个库不知道在什么情况下链接会引用这个库.而linux下phobo到是编译进了相关的函数,打个小补丁应该就可以了.
oldrev
2007-09-23
用 diff 做个补丁给 tango
DavidL
2007-09-23
思路很有新意。搞定tango,windows就可以分享给大家用了
发表评论
- 浏览: 7522 次
- 性别:

- 来自: 武汉

- 详细资料
搜索本博客
我的相册
TangoTeam
共 3 张
共 3 张
最新评论
-
利用运行时性能分析功能调 ...
windows下比较麻烦,tango我没测试,不过看了一下也没有编译到tango ...
-- by tomqyp -
利用运行时性能分析功能调 ...
用 diff 做个补丁给 tango
-- by oldrev -
利用运行时性能分析功能调 ...
思路很有新意。搞定tango,windows就可以分享给大家用了
-- by DavidL -
很详细的 D教程
啊 厉害,要是能找高手翻译下就好了
-- by tomqyp -
很详细的 D教程
很不错。谢谢。我已经把能看懂的全部看了一遍:)
-- by sofire






评论排行榜