在程序的编写与测验中,调试功用是十分重要的,许多时分咱们需求一步步的调试与调查才干找到一些躲藏很深的bug,所以要对编译器的调试选项有一些了解,下面咱们首要看一下编译器的调试选项都有哪些。
表1 编译器的调试选项
选项 |
别号 |
优化的作用 |
–symdebug:dwarf |
-g |
-g是默许选项,在缺省状况下,大多数程序和库都是带调试符号(gcc 参数 -g)编译的。当调试一个带调试符号的程序时,调试器不只能给出内存地址,还能给出函数和变量的姓名。发生符号调试信息并不会影响程序的优化作用。 注:DWARF是一种很杂乱的二进制文件格局,它和和 STAB 格局是运用最广泛的两种可执行和链接格局 (ELF)。DWARF(运用恣意记载格局调试)是面向 ELF 文件的一种较新的格局。创立该格局是为了补偿 STAB 中的一些缺点,然后能够供给更具体、更简洁的数据结构描绘、改变的数据移动和杂乱的言语结构,比方 C 中的言语结构。调试信息存储在目标文件的各个部分中。这种格局是可执行程序与源代码之间联系的简略表明,为了便于调试器对该联系进行处理。对此感兴趣的网友能够查找《The DWARF Debugging Standard》规范仔细阅读,或许参阅IBM的网页阐明http://www.ibm.com/developerworks/cn/opensource/os-debugging/。 |
–symdebug:coff |
|
运用替换的STABS调试格局来使能符号调试;调试信息的传统格局被称为 STAB(符号表)。STAB 调试格局是一种记载不完整的半规范格局,用于调试 COFF 和 ELF 目标文件中的信息。调试信息是作为目标文件的符号表的一部分进行存储的,因而杂乱性和规模是有限的。 运用这种格局的意图是为了与一些很陈旧的调试器或许用户自界说的调试东西进行兼容,由于这些东西往往不兼容新的DWARF格局。 运用这个选项有或许会对程序的优化形成影响,由于为了运用STAB格局下的调试功用,有些代码需求被保存而无法优化。 |
–symdebug:none |
|
制止一切的符号调试信息。 不主张运用这个选项,由于它禁用了调试功用,并使得程序的功用剖析变得十分困难。比方说咱们测算代码的运转时刻的时分,就需求在代码中刺进断点运用调试功用完结测算。 |
–symdebug:profile_coff |
|
运用替换的STABS调试格局来进行程序的功用剖析。 在CCS里,运用这个选项能够在函数级别上刺进断点并预算程序运转时刻,可是不能运用单步调试功用。 |
–symdebug:skeletal |
|
现已抛弃的参数,不再主张运用,即便使能也不发生任何作用。 |
–optimize_with_debug |
-mn |
现已抛弃的参数,不再主张运用,即便使能也不发生任何作用。 |
–symdebug:keep_all_types |
|
这是一个编译器的高档调试选项,它用来坚持未参阅的类型信息。也就是说,使能这个选项之后,能够在调试时调查界说包含在COFF可执行文件中,可是没有被任何地方引证的符号(默许状况下这样的符号是不具有调试信息的,使能调试之后变能够进行一些调试相关的工作了)。 |
调试选项看起来十分杂乱,不过经过前面几回的解说也能够看出,这些姓名特别长,而且一般状况下没有别号(缩写名)的选项,根本都是输入高档选项,关于一般运用者来说的话,咱们的首要意图不是去关怀它编译进程中有多么杂乱的信息,只需利用它的成果,所以一个-g选项就能满意大多数状况的运用了。