调试的艺术
文章平均质量分 60
收集调试方法与技巧,提高经验技能
道格拉斯范朋克
中间件
展开
-
C1189 :#error: Unsupported architecture.错误原因与解决
\ucrt\corecrt_stdio_config.h(31): fatal error C1189 :#error: Unsupported architecture.在使用vs2017编译工程时遇到这个问题,原因是标题博主使用的是vs打开qt的pro原始文件产生的。默认生成的工程里会将这个取消所有预处理器定义选择成是,编译的时候会报此错误。...原创 2021-03-22 11:16:13 · 2781 阅读 · 0 评论 -
VS调试-公共和私有符号
通用符号语法规则符号名称由一个或多个字符组成,但始终以字母,下划线(_),问号(?)或美元符号($)开头。符号名称可以由模块名称限定。感叹号(!)将模块名称与符号分隔(例如,mymodule!main)。如果未使用模块名称,则该符号仍可以带有感叹号作为前缀。即使对于局部变量,使用没有模块名称的感叹号也特别有用,以向调试器命令表明参数是名称而不是十六进制数。例如,变量淡入淡出将由dt(显示类型)命令作为地址读取,除非它带有感叹号作为前缀或使用了-n选项。但是,要指定符号是局部符号,请在其前面加一个美元符原创 2021-03-11 15:51:33 · 535 阅读 · 0 评论 -
/ RTC(运行时错误检查)
用于启用和禁用运行时错误检查功能,以及runtime_checks编译指示。句法复制/RTC1/RTCc/RTCs/RTCu争论1等效于/ RTCsu。c报告何时将值分配给较小的数据类型并导致数据丢失。例如,如果将type的值short 0x101分配给type的变量char。此选项报告您打算截断的情况,例如,如果您希望将a的前八位int作为a返回char。由于/ ...原创 2020-04-07 09:26:45 · 1983 阅读 · 0 评论 -
Visual Studio查看宏定义(define)展开文件
设置方法:在 Visual Studio 开发环境中设置此编译器选项右击,打开该项目的 “属性页”对话框。单击 “C/C++”文件夹。单击 “预处理器”属性页。修改 “生成预处理文件”属性。在同级目录下生成.i文件。即可查看命令含义:/P(预处理到文件)预处理 C 和 C++ 源文件并将预处理输出写入文件。/P此文件具有与源文件相同的基名称和一...原创 2018-05-24 16:49:47 · 8369 阅读 · 0 评论 -
VS远程调试
什么情况下使用远程调试当你的程序在别的机器上运行,没有源代码,也没有vs,这个时候直接把自己的pdb拷贝过去,很方便的就可以远程调试一、启用远程调试可以:在远程计算机上安装远程调试组件,并在开始调试时启动远程调试监视器 ( msvsmon.exe)。- 或 -从一个共享中远程运行远程调试监视器。从一个文件共享中运行远程调试监视器是启用远程调试的最容易的方法。在 64 位平台上安装 Visual S...原创 2018-04-25 20:02:09 · 416 阅读 · 0 评论 -
Lib详解--如何判断lib文件是静态库还是导入库。vs高版本链接低版本的库问题
此功能可以帮助查看lib文件是静调库还是dll的导入库Microsoft 库管理器 (LIB.exe) 创建和管理通用对象文件格式 (COFF) 对象文件库。 LIB 还可用于创建导出文件和引用导出定义的导入库。说明您只能从 Visual Studio 命令提示符处启动此工具。 而不能从系统命令提示符或文件资源管理器中启动此工具。LIB 创建标准库、导入库和导出文件,在生成程序时可将它们与 LI...原创 2018-03-24 14:31:40 · 4723 阅读 · 0 评论 -
链接(VS)
设置链接器选项:可在开发环境内部或外部设置链接器选项。 每个链接器选项的主题讨论如何在开发环境中设置该选项。 有关完整的列表,请参见链接器选项。当您在开发环境外部运行 LINK 时,可以用一种或多种方法指定输入:在命令行上使用命令文件在环境变量中LINK 首先处理在 LINK 环境变量中指定的选项,然后按照选项在命令行上和命令文件中的指定顺序处理这些选项。 如果某个选项带有多个不同的参数,则要优先...原创 2018-03-24 14:22:57 · 2061 阅读 · 0 评论 -
vs的c/c++生成查看工具
Visual C++ 提供两种生成 C/C++ 程序的方法。 最容易(并且最常用)的方法是在 Visual C++ 开发环境中生成。 另外一种方法是使用命令行工具从命令提示符生成。 无论使用哪种方法,您都可以使用 Visual C++ 源编辑器或您选择的第三方编辑器创建源文件。如果程序使用生成文件而不是 .vcxproj 文件,则仍可以在开发环境中把它生成为外部项目。本节内容编译 C/C++ 程序...原创 2018-03-24 14:14:38 · 913 阅读 · 1 评论 -
VS修改目标框架和平台工具集
适应与高版本的vs使用低版本的,你可以直接选择低版本的工具集来编译代码可以更改 Visual C++ 项目设置以面向不同版本的 .NET Framework 和使用不同的平台工具集。 默认情况下,项目系统将使用对应于你用于创建该项目的 Visual Studio 版本的 .NET Framework 版本和工具集版本。 可以通过修改项目属性来更改目标平台工具集。 可以通过修改项目 (.vcxpro...原创 2018-03-14 17:36:22 · 7092 阅读 · 1 评论 -
VS的编译优化问题
最近遇到好多debug编译可以运行,release编译运行崩溃的问题。多与优化有关。可以通过关闭release的优化来验证是否与优化有关。如果发生错误,多数是优化时的命名返回值优化产生的问题,这样的优化会导致程序在优化与未优化之间的不同行为http://blog.csdn.net/xinqingwuji/article/details/78802683下面是vs的优化选项说明:/O 选项控制有助于...原创 2018-03-14 17:29:15 · 8132 阅读 · 0 评论 -
使用 Visual Studio 调试时了解异常
如果您已花费任何时间进行编码, 则可能是您必须处理异常处理。在 Visual Studio 中, 当异常被抛出或结束时未处理时, 调试器可以帮助您调试这些故障, 就像断点被命中时中断一样。在本博客文章中, 我们将研究异常的不同分类, 以及如何配置调试器何时中断这些异常例外的分类我们将首先查看调试器中异常的分类类型。调试器按以下方式对异常进行分类:第一次机会例外:当第一次在应用程序中引发异常时, 这...翻译 2018-03-05 14:09:55 · 3439 阅读 · 0 评论 -
vs2015的异常配置选项
刚用vs2015找不到原来的异常选项。使用了快捷键alt + ctrl + E 打开了。然后又找了具体的位置。Debug->Windows->Exception Settings原创 2018-02-09 13:50:13 · 2286 阅读 · 2 评论 -
头文件引用的区别
#include 指令指示预处理器处理指定文件的内容, 就好像这些内容在源程序中出现在指令出现的位置一样。#include "path-spec"#include 标记可以将常量和宏定义组织到包含文件中, 然后使用 #include 指令将这些定义添加到任何源文件中。包含文件对于合并外部变量和复杂数据类型的声明也很有用。只需在为此目的创建的包含文件中定义和命名类型一次翻译 2017-12-27 19:55:59 · 585 阅读 · 0 评论 -
清单文件引用
并行程序集与以下类型的清单和配置文件一起使用。清单和配置是 XML 文件。清单 描述程序集清单 描述并行程序集的名称、版本、资源和程序集依赖项。应用程序清单 描述应用程序应在运行时绑定到的共享并行程序集的名称和版本, 还可能包含应用程序使用的私有并行程序集的元数据。应用程序配置文件 使用每个应用程序配置重定向程序集依赖项的程序集版本.发布服务器配置文件 使用发布服务器配置在翻译 2017-12-23 12:33:57 · 792 阅读 · 0 评论 -
Visual C++ 2005 中的命名返回值优化
摘要:说明 Visual C++ 编译器如何消除各种情况下多余的 Copy 构造函数调用和析构函数调用。Microsoft 一直在为 Visual C++ 优化编译器寻找新的技术和优化方法,以便尽可能地为编程人员提供更高的性能。本文将说明编译器如何尝试在各种情况下消除多余的 Copy 构造函数调用和析构函数调用。通常,当一个方法返回对象的一个实例时,将创建一个临时对象,并通过复制构造函数将其复制到...翻译 2017-12-14 14:55:16 · 806 阅读 · 0 评论 -
链接器工具错误 LNK1123 lnk1112
这个问题的根本原因是转换到 COFF 期间失败: 文件无效或损坏该对象或资源未能转换为通用对象文件格式 (COFF)。该工具要求所有输入文件的格式为 COFF。 如果输入文件不是 COFF,LINK 自动将 32 位 OMF 对象转换为 COFF,或该工具运行 CVTRES.EXE 来转换资源文件。通过检查以下可能的原因进行修复原创 2017-04-20 21:38:45 · 446 阅读 · 0 评论 -
附加到运行进程之Windows Web服务框架中出现了无法识别的错误
附加到运行进程Visual Studio 调试器可以附加到在 Visual Studio 外运行的进程。可以使用此附加功能执行以下操作: 调试并非在 Visual Studio 中创建的应用程序。同时调试多个进程。 也可以通过在单个解决方案内启动多个项目来调试多个进程。 调试正在远程计算机上运行的进程。调试一个 DLL,该 DLL 运行在不易从原创 2017-03-31 23:55:19 · 1420 阅读 · 0 评论 -
调试 DLL 项目
如何:从 DLL 项目进行调试若要从 DLL 项目而不是从调用应用程序启动调试,必须在“ 属性页”对话框或窗口中输入信息以指示 DLL 项目在何处才能找到调用应用程序。C++“属性页”在布局和内容方面与 C# 和 Visual Basic“属性页”不同。请参考与项目语言相对应的过程。如果托管 DLL 由本机代码调用,并且您希望调试两者,则必须同时启用托管调试器和本机调试器。原创 2017-03-31 23:52:25 · 435 阅读 · 1 评论 -
程序数据库PDB调试文件
程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。当以 /ZI 或 /Zi(用于 C/C++)生成时,将创建一个 PDB 文件。 在 Visual C++ 中,/Fd 选项用于命名由编译器创建的 PDB 文件。当使用向导在 Visual Studio 中创建项目时,/Fd 选项被设置为创建一个名为project.PDB 的 PD原创 2017-03-31 23:43:48 · 2464 阅读 · 1 评论 -
使用 Visual Studio 进行调试
使用 Visual Studio 进行调试您已经创建了应用程序并解决了生成错误。 现在,您必须纠正那些使应用程序或存储过程无法正确运行的逻辑错误。 可以用开发环境集成调试功能做到这一点。这些功能使您可以在某些过程位置停止执行,检查内存和寄存器值,更改变量,观察消息通信量,以及仔细查看代码的行为。调试器安全调试其他进程的能力赋予您极广泛的权力,这是无法通过其他途经获得的,在进行远程调试时...翻译 2017-03-31 23:36:18 · 7298 阅读 · 0 评论 -
Microsoft.CppCommon.targets error MSB6006
已经使用了很久的VS,VS有一些技巧还是很让人惊艳的。在这里做一些个人总结的小技巧。1、有时候会遇到error MSB****,CL.exe已退出的错误可以在菜单栏【工具】---【选项】---【项目与解决方案】---【生成并运行】,选择【msbuild项目生成详细信息】选项。下拉列表中有选择详细,能给出更多详细的编译问题,很有用。2、数据断点的设置。断点时调试的基础,断...原创 2017-02-15 22:46:13 · 2058 阅读 · 0 评论 -
C标准预定义宏
VS调试方式一、使用ANSI C标准预定义宏C标准指定了一些预定义宏,编程中常常用到。__DATE__ 进行预处理的日期__FILE__ 代表当前源代码文件名的字符串__LINE__ 代表当前源代码文件中行号的整数常量__STDC__ 设置为1时,表示该实现遵循C标准__STDC_HOSTED__ 为本机环境设置为,否则设为0__S...原创 2016-12-14 18:43:10 · 246 阅读 · 0 评论 -
常用Linux命令记录-linux源代码下载到win调试行不匹配
usr(unix system resource)1、Ubuntu切换root:sudo su -2、刷新库目录缓存ldconfig # refresh shared library cache.3、回到上一次的目录cd - 或者 cd $环境变量4、查找软件安装目录which XXX查找软件运行目录whereis XXX5、查看所有pkg信息...原创 2019-12-27 09:38:02 · 161 阅读 · 0 评论 -
堆栈导致程序异常
栈溢出了,修改连接器-系统-堆栈保留大小与堆栈提交大小原创 2019-12-23 14:58:57 · 975 阅读 · 0 评论 -
gdb调试过程学习
说明:next(n)表示:命令是next,n是缩写;b表示break;i b表示info break;cond表示condition;r表示run;s表示step;c表示continue;p表示print;bt表示backtrack 命令与参数之间有一个空格调试运行环境相关命令1、set args可指定运行时参数。(如:set args 10 20 30 40 50 )2、sh...原创 2016-10-26 20:35:27 · 1100 阅读 · 0 评论 -
大小端测试
从图中可以看出,win存储数据是小端。内存指针默认指向低地址,而存储的时候是末尾存在低地址原创 2019-11-22 13:21:49 · 438 阅读 · 0 评论 -
0xc00200001:字符串绑定无效
0xc0020001 : the string binding is invalid第一次发现这个错误,查找了好久。c#混合编程,c#调用c++.修改链接器-系统-子系统-选择控制台,然后就没有这个问题了。有些太具体的原因没有再仔细思考...原创 2018-05-15 17:57:14 · 2359 阅读 · 2 评论 -
the following error occured cant find a qt version for the current build platform
在VS中写QT程序,把32位改成x64过程出现问题:就是编译库不匹配,解决方式:在工程上右键选择Qt Project Settings;在Properties选项页, 找到最下面的 Version;选择一个合适的版本...原创 2018-05-16 19:59:52 · 1252 阅读 · 0 评论 -
ArgumentException: GCHandle value belongs to a different domain
GCHandle多次调用ToIntPtr或者FromIntprt会产生这个问题原创 2018-05-23 17:50:26 · 872 阅读 · 0 评论 -
system.text.encodeing.default.HeaderName之代码页
获取操作系统的当前 ANSI 代码页的编码。不同计算机可以使用不同编码作为默认,且该默认编码甚至可以在单个计算机上更改。 因此,从一台计算机传输到另一台或甚至在同一台计算机上的不同时间检索到的数据可能不正确转换。 此外,Default 属性返回的编码使用最佳回退将不支持的字符映射到代码页支持的字符。 出于这两个原因,一般不推荐使用默认编码。 若要确保编码后的字节能够正确解码,应用程序应当使用带前导...原创 2018-05-29 17:06:19 · 218 阅读 · 0 评论 -
__GXX_EXPERIMENTAL_CXX0X__宏定义
__GXX_EXPERIMENTAL_CXX0X__在使用选项-std = c ++ 0x或-std = gnu ++ 0x编译C ++源文件时定义此宏。 它表示可能包含在C ++ 0x中的某些功能。 请注意,这些功能是实验性的,可能会在GCC的未来版本中更改或删除。旧的-std = c ++ 0x仅用于不支持-std = c ++ 11的旧编译器版本,他们选择该名称来表示当时即将到来的功能(和A...原创 2018-07-12 17:43:57 · 1570 阅读 · 0 评论 -
/Z7、/Zi、/ZI(调试信息格式)
选择为程序创建的调试信息的类型,并选择是将此信息保存在对象(.obj)文件中,还是保存在程序数据库(PDB)中。语法/Z{7|i|I} 备注下表描述了这些选项。无不生成任何调试信息,因此编译较快。/Z7生成包含用于调试器的完整符号调试信息的 .obj 文件。 符号化调试信息包含变量的名称和类型以及函数和行号。 不生成任何 .pdb 文件。对于第三方库的分发服务器,...翻译 2018-07-19 19:57:44 · 2472 阅读 · 0 评论 -
如何使用java项目在eclipse中调试本机jni c ++代码
在开发java项目时,使用使用了Native Library(dll),其代码是用C/CPP编写的。 我想调试java应用程序,并且当我到达dll中编译的本机方法时,我想要进入CPP代码。 我该怎么做? 有没有可用的IDE可以在java和cpp代码之间切换调试? 由于目前没有可以直接切换调试器的解决方法。可用的一个解决方法是将native的调试器连接进来,使用两个调试器一起调试。 在调试模...原创 2018-07-31 11:11:42 · 682 阅读 · 0 评论 -
undefined reference to `__GOTT_BASE__' undefined reference to `__GOTT_INDEX__'
问题:编译的静态库或者动态库没有添加-fpic的属性分析:全局偏移表GOT(Global Offset Table)索引是在链接器建立的,属于.data数据段,是gp寄存器管理。PIC介绍 PIC 代码在调用函数和对数据变量进行操作的方式上与传统代码截然不同。它将通过间接表"全局偏移表"(GOT)访问这些函数和数据,通过使用保留名称"_GLOBAL_OFFSET_TAB...原创 2019-10-02 12:01:12 · 568 阅读 · 0 评论 -
c2552
标识符':非聚合不能用初始化列表初始化聚合标识符被错误地初始化。聚合被定义为:数组没有的类,结构和联合:构造函数私人或受保护的会员基类虚拟功能另外,Visual C ++不允许包含构造函数的集合中的数据类型。以下表示当对一个类型尝试集合初始化时C2552可能触发的原因:该类型具有一个或多个用户定义的构造函数。该类型有一个或多个非静态私有数据成员。该类型具有一个或多个虚拟功能。该类型有一个基类。该类...原创 2018-04-17 14:27:36 · 1221 阅读 · 0 评论