C++(MSVC) 下查看call strack trace;查看函数是否被inline_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++(MSVC) 下查看call strack trace;查看函数是否被inline

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

 2014/9/20 21:12:31  cherishLC  程序员俱乐部  我要评论(0)
  • 摘要:最近写C++程序,,各种不知道错误出在哪一行,即使输出了行号,也没用,因为不知道哪一次调用出的错,程序bug处离调用位置很远,要调程序不得不一行行的调!后来发现个好东西:StackWalker(仅限MSVC):http://www.codeproject.com/Articles/11132/Walking-the-callstack另有GCC版本:http://stackoverflow.com/questions/691719/c-display-stack-trace-on
  • 标签:函数 c++ all
最近写C++程序,,各种不知道错误出在哪一行,即使输出了行号,也没用,因为不知道哪一次调用出的错,程序bug处离调用位置很远,要调程序不得不一行行的调!

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

1、用StackWalker进行调试
从本文的第一链接里或者本文附件下载StackWalker,新建一个工程,直接运行即可看到示例的结果。
结果会被输出到两个地方:
  • 1、控制台,这是由于我们重载了StackWalker类的OnOutput()方法;
  • 2、Visual Studio的Output的debug窗口(debug时直接可见,release时默认显示的是输出为build信息)

下面这张图对应的是debug版本的输出(最后几行),可以看到最后的几行对应函数的调用顺序~



下面是对应的代码:



2、用StackWalker查看函数是否被inline
发现这东西除了用来调试bug外,还有一个用途———— 查看函数是否被inline了!
还是刚才的示例程序,改成release版本,输出变成了下面这样——TestCurrentThread,Func2,Func3,Func4都不见了!只剩下Func5!说明那些函数被inline了~



再来看看使用__forceinline后的效果:




  • class='magplus' title='点击查看原始大小图片' />
  • 大小: 40.9 KB
  • 大小: 42.6 KB
  • 大小: 26.3 KB
  • 大小: 54.7 KB
  • 大小: 66 KB
  • StackWalker.zip (64.2 KB)
  • 下载次数: 0
  • 查看图片附件
发表评论
用户名: 匿名