C++(MSVC) 下查看call strack trace;查看函数是否被inline

[size=large]最近写C++程序,,各种不知道错误出在哪一行,即使输出了行号,也没用,因为不知道哪一次调用出的错,程序bug处离调用位置很远,要调程序不得不一行行的调![/size]

后来发现个好东西:
StackWalker(仅限MSVC): [url]http://www.codeproject.com/Articles/11132/Walking-the-callstack[/url]
另有GCC版本:[url]http://stackoverflow.com/questions/691719/c-display-stack-trace-on-exception[/url]

[color=blue][size=x-large]1、用StackWalker进行调试[/size][/color]
[size=large]从本文的第一链接里或者本文附件下载StackWalker,新建一个工程,直接运行即可看到示例的结果。
结果会被输出到两个地方:
[list]
[*]1、控制台,这是由于我们重载了StackWalker类的OnOutput()方法;
[*]2、Visual Studio的Output的debug窗口(debug时直接可见,release时默认显示的是输出为build信息)
[/list]
下面这张图对应的是debug版本的输出(最后几行),可以看到最后的几行对应函数的调用顺序~[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/2956/5534471f-a286-3fd7-9e85-30f8a89569cb.png[/img]

[size=large]下面是对应的代码:[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/2958/23b77b66-cf2f-3031-b76d-e44c97058f71.png[/img]


[color=blue][size=x-large]2、用StackWalker查看函数是否被inline[/size][/color]
[size=large]发现这东西除了用来调试bug外,还有一个用途———— 查看函数是否被[color=red]inline[/color]了!
还是刚才的示例程序,改成release版本,输出变成了下面这样——TestCurrentThread,Func2,Func3,Func4都不见了!只剩下Func5!说明那些函数被inline了~[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/2960/7f224291-c4ea-3ac1-b4fe-42845f5405bf.png[/img]

[size=large]再来看看使用[color=blue]__forceinline[/color]后的效果:[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/2962/01787693-99a8-3afe-a02a-001eec1f1fab.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0101/2964/742ac18a-9ab2-317c-b9b1-b61825cc762f.png[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值