`

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. **使用调试器**...

    MSVC编译器

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

    mingw调用MSVC编译的dll

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

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

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

    vs2015 msvc编译器

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

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

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

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

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

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

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

    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++(MSVC)_和_OpenGL_的简单画图工具_通过橡皮筋技术动态绘制图形;

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

    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平台下的命令行工具...

    Microsoft Visual C++ Build Tools

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

    vscode-msvc

    "vscode-msvc"指的是在VSCode中配置MSVC(Microsoft Visual C++ Compiler)作为C++项目的编译器。MSVC是微软提供的C++开发工具,它包含了编译器、调试器和其他开发工具,是Windows平台上开发C++应用的重要选择。 ...

    VC++2.0 MSVC20

    MSVC20,全称为Microsoft Visual C++ 2.0,这个版本标志着微软在C++开发工具领域的重大进步。它引入了多项新功能和改进,包括: 1. **集成开发环境(IDE)**:VC++2.0提供了第一个完整的IDE,允许用户在一个统一的...

    C调用C++dll测试

    `__declspec(dllexport)`是MSVC特有的,用于告诉编译器这个函数将被导出到DLL中。 2. **编译为DLL**:使用C++编译器,如Visual Studio的cl.exe,编译源文件为DLL。这通常涉及到设置相应的编译选项,如`/LD`或`/LDd`...

Global site tag (gtag.js) - Google Analytics