`

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

c++ 
阅读更多
最近写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后的效果:




  • 大小: 40.9 KB
  • 大小: 42.6 KB
  • 大小: 26.3 KB
  • 大小: 54.7 KB
  • 大小: 66 KB
分享到:
评论

相关推荐

    Microsoft C++ 生成工具独立 MSVC 编译器、库和脚本

    Microsoft C++ 生成工具通过可编写脚本的独立安装程序提供 MSVC 工具集,无需使用 Visual Studio。 如果从命令行界面(例如,持续集成工作流中)生成面向 Windows 的 C++ 库和应用程序, 作为持续集成工作流的一部分)...

    Visual C++、MSVC、VC++

    Visual C++(简称VC++或MSVC)不仅支持标准C++,还包含了对Microsoft特定的扩展和特性,比如MFC(Microsoft Foundation Classes)库,使得开发者可以构建基于Windows操作系统的桌面应用程序。 **集成开发环境(IDE...

    查看DLL 导出函数

    1. **使用工具**:Windows系统自带的`dumpbin`命令行工具,位于Visual Studio安装目录下的`VC\bin`或`VC\Tools\MSVC`子目录下。运行`dumpbin /exports dllname.dll`即可显示DLL的所有导出函数。 2. **使用调试器**...

    mingw调用MSVC编译的dll

    在软件开发过程中,经常会出现不同编译环境下的库文件(如DLL)需要被另一个环境调用的情况。本文将详细介绍如何在MinGW环境中调用由Microsoft Visual C++ (MSVC) 编译器生成的DLL。 #### 知识点概览 1. **MinGW与...

    Microsoft C 和 C++ (MSVC) 运行时库 DLL修复 运行库 一键安装MSVC运行库

    DLLEscort软件可以免费下载大量DLL文件,修复一些文件丢失找不到问题。

    MSVC编译器

    MSVC编译器对C++11、C++14、C++17和C++20等现代C++标准提供了良好的支持。开发者可以通过`/std`开关选择所使用的标准版本。 总之,MSVC编译器是C++开发的重要工具,无论是在Visual Studio IDE内还是通过命令行,都...

    msvc_log_stacktrace:一个iRODS微服务,以writeLine的方式人为地转储stacktrace

    在`msvc_log_stacktrace`的实现中,`writeLine`函数被用作输出接口,将堆栈跟踪信息以可读的格式打印到日志文件或标准输出。这使得开发者能够在不修改原有代码的情况下,插入堆栈跟踪功能,简化了故障排查过程。 ...

    官网最新c++版本 vs2019对应pcl-1.11.0-pdb-msvc2019-win64.zip

    标题中的“VS2019”指的是Visual Studio 2019,这是一款由微软开发的集成开发环境(IDE),广泛用于C++编程。它提供了丰富的功能,包括代码编辑、调试、构建工具以及对多种软件开发框架的支持。而“pcl”则代表Point...

    vs2015 msvc编译器

    VS2015 MSVC编译器是Visual Studio 2015中的一部分,它包含了Microsoft的C++编译器工具集,用于构建Windows平台上的应用程序。MSVC(Microsoft Visual C++)是微软开发的一款集成开发环境,支持C++语言,并提供了...

    基于_C++(MSVC)_和_OpenGL_的简单画图工具_通过橡皮筋技术动态绘制图形;

    在现代计算机编程领域中,C++语言因其性能优异、执行效率高等特点被广泛应用于系统编程、游戏开发以及图形处理等多个方面。而OpenGL(Open Graphics Library)作为一种开放的跨语言、跨平台的应用程序编程接口(API...

    C++Java 如何呼叫Matlab 所提供的函数

    ### C++/Java 如何调用 MATLAB 提供的函数 #### 背景与目标 在实际开发过程中,经常会遇到需要结合不同编程语言优势来解决问题的情况。比如在数学计算领域,MATLAB 以其强大的数学库而闻名,但在工程实现方面,C++...

    VSCode+Qt+MSVC配置

    安装完成后,要确保MSVC的bin目录已经被添加到系统的PATH环境变量中,这样VSCode才能识别到MSVC编译器。 接下来需要在VSCode中安装必要的扩展,这些扩展可以帮助VSCode更好地支持C++和Qt的开发。例如,可以通过...

    msvc2008.zip

    标题“msvc2008.zip”提示我们这个压缩包包含与Microsoft Visual C++ 2008相关的文件,可能是为了支持MATLAB环境。描述提到的“msvc2008.xml”和“msvcpp2008.xml”文件是解决MATLAB无法识别Visual Studio 2008...

    Microsoft Visual C++ 14.0 工具.zip

    标题中的“Microsoft Visual C++ 14.0 工具.zip”指的是一个包含Microsoft Visual C++ 14.0编译器或相关组件的压缩文件,通常用于解决Python安装过程中遇到的依赖问题。在描述中提到的情况是,当尝试安装Python软件...

    点云Las文件读写c++库 Lasib_msvc2015

    LASlib在VS2015 x64平台下的编译Release和Debug,对于安装VS2015的,直接包含有VS工程项目文件,可以自己根据需要进行编译。 测试:Win8.1 VS2015 64bit通过,已经用起来。

    C++汇编x64调用asm文件例子

    在链接阶段,你需要使用汇编器(如NASM)和链接器(如MSVC的link.exe)将汇编代码转换为可执行目标代码并与C++代码连接。 为了在VC++环境中编译和链接这个项目,你需要设置正确的编译器和链接器选项。在Visual ...

    ucos 2.86 msvc7

    本篇将详细探讨如何在Windows XP环境下,利用Microsoft Visual C++ 2008(MSVC7,尽管实际是MSVC9)进行UCOS 2.86的移植与编译。 首先,UCOS 2.86的移植过程涉及到硬件抽象层(HAL)的构建,这是将操作系统核心功能...

    ta-lib-0.4.0-msvc

    "ta-lib-0.4.0-msvc" 版本是专为Microsoft Visual C++编译环境设计的,这意味着它可以方便地与C++代码集成,同时也可能支持其他支持DLL调用的语言,如Python、Java、R等。Nmake.exe是一个Windows平台下的命令行工具...

    基于_C++(MSVC)_和_OpenGL_的太阳系(太阳,地球,月球)系统运动图绘制_

    通过MSVC,开发者可以编写、编译和调试C++代码,并利用OpenGL函数库构建出复杂的三维图形程序。 项目开发过程中,将涉及到多个技术点。首先,开发者需要创建三维模型来表示太阳、地球和月球。这些模型可以通过三维...

    Microsoft Visual C++ Build Tools

    **Microsoft Visual C++ Build Tools** 是一套由微软提供的开发工具,主要用于构建C++应用程序。它包含了编译器、链接器以及其他必要的工具,使得开发者能够创建、编译和调试C++代码,尤其对于需要C++接口的第三方...

Global site tag (gtag.js) - Google Analytics