-
-
[旧帖]
[原创]C++调试信息详解---解开人们心中的困惑
0.00雪花
-
发表于:
2010-1-4 18:05
1453
-
[旧帖] [原创]C++调试信息详解---解开人们心中的困惑
0.00雪花
在程序的调试过程中,难免会出现这样或那样的错误。对于一些简单的错误我们很容易识别,而对于错误的提示,往往一些奇怪的字符串让我们头痛。如下图:
这一串似懂非懂的字符串到底是什么意思呢?
在一次学习汇编与C混合编程的过程中,我意思到了这个问题的严重性,于是我去查了一下MSDN,结果里面没有(最近的版本有没有我不知道,反正我的没有)。于是我根据那本书上讲的原理,把这方面的资料通过实例程序找了出来。可以利用VC环境编译选项生成.map文件,然后通过观察.map文件的内容,经过一一甄别得到如下内容。正因为我在网上没有见到类似的东西,故以此与大家分享。
(如下数据是一个2列的表格,显示效果不好,请多多包含)
类型 符号表示
Char D
Unsigned char E
Short F
Unsigned short G
Int H
Unsigned int I
Long J
Unsigned long K
Float M
Double N
& AA
* PA
[] QA
多维数组(数组的最大维数是11,分别用Y0-Y9表示) 第一维是默认的,无需标记,第2-11维都要标记,分别用数字加上@符号表示。数字1-14的单独表示为1-9,L-P.而后面的数字则采用16进制表示,为A-P,如15(BA),20(BE),32(CA),例子:int [][20][30]-----QAY1BE@BO@H
结构(用U和@@表示) 如定义了time结构,则time t对应Utime@@
多结构多参数(此次参数为&,*,**,[]等附加标志) 在这种情况下,都采用简化表示法:1-每遇到一种新的结构,采用上述方法定义;2-遇到带旧附加标志旧结构,则用阿拉伯数字表示(从0开始),这些数字是这样产生的--------定义2个变量cnt=0,num=0,在编译参数列表时,每遇到一个新结构,cnt++,num++;每遇到一个带新附加标志的旧结构,cnt++。而简化表示就是用cnt代替的。3-每遇到带新附加标志的旧结构,则在U前面加上附加标志的符号表示,在U后面加上num@@。如下例中的time &表示为AAU2@。举例: 对于参数列表(stu a,stu b,time c,time &d,time e,time & f),其对应的编译结果是Ustu@@ 0 Utime@@ AAU2@ 1 2
类 V+类名+@@
普通成员函数 ?+函数名+@@+参数列表编译结果+@Z
类的成员函数 ?+函数名+@类名+@@+参数列表编译结果+@XZ
Void X
Bool _N
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课