如何使用Cmake生成debug版本和release版本的程序

如何使用Cmake生成debug版本和release版本的程序,第1张

Debug版本就是调试版本,Visual C++

60默认的就是Debug版本。在Debug版本中,可以使用单步执行、跟踪等功能,但其生成的可执行文件比较大,代码运行比较慢。Release版本就是发行版本,其运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。

还有一点,Release版本的exe文件链接的目标是标准的MFC DLL(Use MFC in a shared

or static

dll)。比如MFC42DLL。这些DLL在安装windows的时候,就会装到系统中。因此,这样的exe在没有安装Visual C++

60的机器上也能运行。而Debug版本的exe链接了调试版本的MFC DLL文件,比如MFC42DLL。在没有安装Visual C++

60的机器上不能运行,因为缺少MFC42DDLL等,除非选择use static dll when link。

Debug版本中包含大量的调试信息,所以我们能够单步执行、Watch表达式等等,而release版本仅包含我们的代码。由于要利于程序的测试,Debug版本的程序附带很多测试信息和测试程序时才需要的代码,所以Debug版本的程序需要VC的Debug(注意这里不是指程序的Debug,而是指VC的调试器)才能运行。而Release版本就不具有这些特性,所以在Release版本的程序上不能做调试!打包就相当于将你制作的东西发布出去,应该是优化过的代码,当然要用发布版本,即Release版本。

两者所用的动态连接库是不一样的,Release版本所需要的dll和lib已经包含在Windows的system(或者system32)下,所以只需要拷贝就可以运行了,但是Debug版本需要的dll和lib是在安装vc时装上去的,如果你想直接将debug版本给用户,需要拷贝几个文件,但这样显得很臃肿,一般来说不可取。

1,debug:Debug通常称为调试版,通过一系列编译选项,编译结果通常包含调试信息,并且不做任何优化,以便为开发人员提供强大的应用程序调试功能。 Debug版本包含调试信息,因此它比Release版本大得多(可能是数百K到M)。

调试调试,可以通过软件,堆栈跟踪,调试等 *** 作来查找错误。至于是否需要DLL支持,主要取决于您使用的编译选项。如果它基于ATL,则Debug和Release版本对DLL有类似的要求。

2,发布:发布版本,如果程序在最终调试后没有明显的错误,可以使用此选项编译为可用软件与他人共享。发布通常称为发布版本,供用户使用。通常,不允许客户在发布版本上进行调试。

因此,不会保存调试信息,同时,它经常被优化以实现最小的代码和速度。方便用户使用。

3、性能分析。可以在执行软件期间分析CPU利用率和存储器占用率。它还可用于发现和分析异常和错误。

扩展资料:

调试程序发布版本的方法:

1如前所述,Debug和Release只是一组编译选项。实际上没有区分两者的定义。您可以修改Release版本的编译选项以缩小错误范围。如上所述,您可以逐个将Release的选项更改为相应的Debug选项,例如/ MD到/ MDd,/ O1到/ Od,或运行时优化到程序大小优化。

一次只更改一个选项,查看错误消失时更改了哪个选项,然后查找与该选项相关的错误。可以直接从ProjectSettings中的列表中选择这些选项,通常不会手动修改。由于上述分析相当全面,这种方法是最有效的。

2,在编程过程中,你应该时刻注意测试发布版本,以免最终代码过多,时间非常紧张。

3使用Debug版本中的/ W4警告级别从编译器获取最大错误信息。例如,如果(i = 0)将导致/ W4警告。不要忽略这些警告,通常这是由程序中的错误引起的。但有时/ W4会带来大量冗余信息,例如未使用的函数参数警告,并且许多消息处理程序会忽略某些参数。

参考资料:

百度百科-Dev-C++

参考资料:

百度百科-单步调试

参考资料:

百度百科-Release版本

参考资料:

百度百科-计算机程序

DEBUG是为汇编语言设计的一种高度工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。\x0d\一、DEBUG程序的调用\x0d\ 在DOS的提示符下,可键入命令:\x0d\ C:\DEBUG [D:][PATH][FILENAME[EXT]][PARM1][PARM2]\x0d\ 其中,文件名是被调试文件的名字。如用户键入文件,则DEBUG将指定的文件装入存储器中,用户可对其进行调试。如果未键入文件名,则用户可以用当前存储器的内容工作,或者用DEBUG命令N和L把需要的文件装入存储器后再进行调试。命令中的D指定驱动器PATH为路径,PARM1和PARM2则为运行被调试文件时所需要的命令参数。\x0d\ 在DEBUG程序调入后,将出现提示符,此时就可用DEBUG命令来调试程序。\x0d\二、DEBUG的主要命令\x0d\ 1、显示存储单元的命令D(DUMP),格式为:\x0d\ _D[address]或_D[range]\x0d\ 例如,按指定范围显示存储单元内容的方法为:\x0d\ -d100 120\x0d\18E4:0100 c7 06 04 02 38 01 c7 06-06 02 00 02 c7 06 08 02 G8GG\x0d\18E$:0110 02 02 bb 04 02 e8 02 00-CD 20 50 51 56 57 8B 37 ;hM PQVW\x0d\ 7\x0d\18E4:0120 8B\x0d\ 其中0100至0120是DEBUG显示的单元内容,左边用十六进制表示每个字节,右边用ASCII字符表示每个字节,·表示不可显示的字符。这里没有指定段地址,D命令自动显示DS段的内容。如果只指定首地址,则显示从首地址开始的80个字节的内容。如果完全没有指定地址,则显示上一个D命令显示的最后一个单元后的内容。\x0d\2、修改存储单元内容的命令有两种。\x0d\ ·输入命令E(ENTER),有两种格式如下:第一种格式可以用给定的内容表来替代指定范围的存储单元内容。命令格式为:\x0d\ -E address[list]\x0d\例如,-E DS:100 F3'XYZ'8D\x0d\ 其中F3,'X','Y','Z'和各占一个字节,该命令可以用这五个字节来替代存储单元DS:0100到0104的原先的内容。\x0d\ 第二种格式则是采用逐个单元相继修改的方法。命令格式为:\x0d\ -E address\x0d\例如,-E DS:100\x0d\ 则可能显示为:\x0d\ 18E4:0100 89-\x0d\ 如果需要把该单元的内容修改为78,则用户可以直接键入78,再按“空格”键可接着显示下一个单元的内容,如下:\x0d\ 18E4:0100 8978 1B-\x0d\ 这样,用户可以不断修改相继单元的内容,直到用ENTER键结束该命令为止。\x0d\ ·填写命令F(FILL),其格式为:\x0d\ -F range list\x0d\例如:-F 4BA:0100 5 F3'XYZ'8D\x0d\ 使04BA:0100~0104单元包含指定的五个字节的内容。如果list中的字节数超过指定的范围,则忽略超过的项;如果list的字节数小于指定的范围,则重复使用list填入,直到填满指定的所有单元为止。\x0d\3)检查和修改寄存器内容的命令R(register),它有三种格式如下:\x0d\ ·显示CPU内所有寄存器内容和标志位状态,其格式为:\x0d\ -R\x0d\例如,-r\x0d\ AX=0000 BX=0000 CX=010A DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000\x0d\ DS=18E4 ES=18E4 SS=18E4 CS=18E4 IP=0100 NV UP DI PL NZ NA PO NC\x0d\ 18E4:0100 C70604023801 MOV WORD PTR [0204],0138 DS:0204=0000\x0d\ ·显示和修改某个寄存器内容,其格式为:\x0d\ -R register name\x0d\例如,键入\x0d\ -R AX\x0d\ 系统将响应如下:\x0d\ AX F1F4\x0d\ :\x0d\即AX寄存器的当前内容为F1F4,如不修改则按ENTER键,否则,可键入欲修改的内容,如:\x0d\\x0d\ -R bx\x0d\ BX 0369\x0d\ :059F\x0d\则把BX寄存器的内容修改为059F。\x0d\ ·显示和修改标志位状态,命令格式为:\x0d\ -RF系统将响应,如:\x0d\ OV DN EI NG ZR AC PE CY-\x0d\ 此时,如不修改其内容可按ENTER键,否则,可键入欲修改的内容,如:\x0d\ OV DN EI NG ZR AC PE CY-PONZDINV\x0d\ 即可,可见键入的顺序可以是任意的。\x0d\4)运行命令G,其格式为:\x0d\ -G[=address1][address2[address3]]\x0d\ 其中,地址1指定了运行的起始地址,如不指定则从当前的CS:IP开始运行。后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。\x0d\5)跟踪命令T(Trace),有两种格式:\x0d\ ·逐条指令跟踪\x0d\ -T [=address]\x0d\ 从指定地址起执行一条指令后停下来,显示所有寄存器内容及标志位的值。如未指定地址则从当前的CS:IP开始执行。\x0d\ ·多条指令跟踪\x0d\ -T [=address][value]\x0d\ 从指定地址起执行n条指令后停下来,n由value指定。\x0d\6)汇编命令A(Assemble),其格式为:\x0d\ -A[address]\x0d\ 该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:DEBUG把键入的数字均看成十六进制数,所以如要键入十进制数,则其后应加以说明,如100D。\x0d\7)反汇编命令U(Unassemble)有两种格式。\x0d\ ·从指定地址开始,反汇编32个字节,其格式为:\x0d\ -U[address]\x0d\例如:\x0d\ -u100\x0d\ 18E4:0100 C70604023801 MOV WORD PTR[0204],0138\x0d\ 18E4:0106 C70606020002 MOV WORD PTR[0206],0200\x0d\ 18E4:010C C70606020202 MOV WORD PTR[0208],0202\x0d\ 18E4:0112 BBO4O2 MOV BX,0204\x0d\ 18E4:0115 E80200 CALL 011A\x0d\ 18E4:0118 CD20 INT 20\x0d\ 18E4:011A 50 PUSH AX\x0d\ 18E4:011B 51 PUSH CX\x0d\ 18E4:011C 56 PUSH SI\x0d\ 18E4:011D 57 PUSH DI\x0d\ 18E4:011E 8B37 MOV SI,[BX]\x0d\如果地址被省略,则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。\x0d\ ·对指定范围内的存储单元进行反汇编,格式为:\x0d\ -U[range]\x0d\例如:\x0d\ -u100 10c\x0d\ 18E4:0100 C70604023801 MOV WORD PTR[0204],0138\x0d\ 18E4:0106 C70606020002 MOV WORD PTR[0206],0200\x0d\ 18E4:010C C70606020202 MOV WORD PTR[0208],0202\x0d\或\x0d\ -u100 112 \x0d\ 18E4:0100 C70604023801 MOV WORD PTR[0204],0138\x0d\ 18E4:0106 C70606020002 MOV WORD PTR[0206],0200\x0d\ 18E4:010C C70606020202 MOV WORD PTR[0208],0202\x0d\\x0d\ 可见这两种格式是等效的。\x0d\8)命名命令N(Name),其格式为:\x0d\ -N filespecs [filespecs]\x0d\命令把两个文件标识符格式化在CS:5CH和CS:6CH的两个文件控制块中,以便在其后用L或W命令把文件装入存盘。filespecs的格式可以是:\x0d\[d:][path] filename[ext]\x0d\例如,\x0d\ -N myprog\x0d\ -L\x0d\ -\x0d\可把文件myprog装入存储器。\x0d\9)装入命令(Load),有两种功能。\x0d\ ·把磁盘上指定扇区范围的内容装入到存储器从指定地址开始的区域中。其格式为:\x0d\ -L[address[drive sector sector]\x0d\ ·装入指定文件,其格式为:\x0d\ -L[address]\x0d\此命令装入已在CS:5CH中格式化了文件控制块所指定的文件。如未指定地址,则装入CS:0100开始的存储区中。\x0d\10)写命令W(Write),有两种功能。\x0d\ ·把数据写入磁盘的指定扇区。其格式为:\x0d\ -W address drive sector sector\x0d\ ·把数据写入指定的文件中。其格式为:\x0d\ -W[address]\x0d\此命令把指定的存储区中的数据写入由CS:5CH处的文件控制块所指定的文件中。如未指定地址则数据从CS:0100开始。要写入文件的字节数应先放入BX和CX中。\x0d\11)退出DEBUG命令Q(Quit),其格式为:\x0d\ -Q\x0d\它退出DEBUG,返回DOS。本命令并无存盘功能,如需存盘应先使用W命令。

以上就是关于如何使用Cmake生成debug版本和release版本的程序全部的内容,包括:如何使用Cmake生成debug版本和release版本的程序、C语言dev c++,选项release,debug,profiling什么意思、debug命令有什么作用如何使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9811479.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存