[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]
后来发现个好东西:
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]