一. gdb编译选项(gcc/g++ 在编译时加入-g来加入debug信息) -g0等于不加-g,即不包含任何调试信息 -g1包含最小的调试信息,一般来说只有在你不需要调试信息,之需要backtrack信息,并且很在意程序大小,或者有其他保密/特殊需求是才会使用-g1 -g2为gdb默认,包含绝大多数你需要的调试信息 -g3包含额外的调试信息,...
当该地址的中的int指针指向的内容变化/被读取,或者该地址的内容变化/被读取时,程序交出控制权进入调试器。 注意3)和4)的区别在于,当加入-l选项后,会同时监视表达式本身以及表达式指向的内容。 2. 断点是指当执行到程序某一步时,程序交出控制权进入调试器。值得注意的是,break会有一些变体:tbreak,hbreak,thbre...
-g1 生成最少量的调试信息,这些信息足够用来通过backtrace查看调用栈符号信息。主要包括了函数声明、外部变量和行号等信息,但是不包含局部变量信息。这个选项比较少用。 -g2 生成足够多的调试信息,可以用GDB进行正常的程序调试,这个是默认选项。 -g3 在-g2的基础上产生更多的信息,如宏定义。 可见,我们编译时加的...
expansion when you use -g3. 加了-g3的参数后,gcc编译的时候,会将扩展的debug 信息编译进二进制文件里面,包括宏定义信息。 所以,如果要使用gdb调试二进制文件里面的宏定义信息,这个选项必须开启。 -gdwarf-2 参数的意思: man gcc, 可以得出如下相关的解释: -gdwarf-2 does not accept a concatenated debug...
如果需要使用gdb,在编译代码时需要先将调试开关打开,对应gcc的-g、-g3(提供更多的调试信息)或-ggdb(为gdb提供更多的专有信息)选项,例如: gcc-g-o test test.c 启动方式 方式一:直接通过命令gdb file加载elf可执行文件 方式二:对于已经在运行的程序,可以先查询对应程序的PID,再通过gdb --pid=XXX动态接入进行...
gcc -Wall -g3 -o test test.c 1. gcc生成调试信息的一些选项: -g:该选项可以利用操作系统的“原生格式(native format)”生成调试信息。GDB 可以直接利用这个信息,其它调试器也可以使用这个调试信息 -ggdb:使 GCC 为 GDB 生成专用的更为丰富的调试信息,但是,此时就不能用其他的调试器来进行调试了 (如 ddx...
-g 选项默认不会包括一些宏定义的信息。可以在编译时使用-g3 GDB使用细节: 启动并调试: gdb program 带core文件启动并调试: gdb program core (执行后,停在哪,系统就down在哪) 调试一个运行中的进程: gdb program 1234 或 gdb - 1234 (1234是进程号) ...
通过使用“-g3”选项重新编译程序,GDB中便能查看宏定义。甚至可以像调用函数一样,使用call命令来调用宏。此操作有助于深入理解宏定义的上下文和使用场景。在实现GDB调试宏定义时,理解GCC调试选项的重要性是关键。通过选择合适的调试选项,可以在GDB中更好地分析和调试使用宏定义的C/C++程序。
测试:debug版本,无-g,不屏蔽qt打印输出 测试:debug版本,有-g的,不屏蔽qt打印输出 有行号,行号跟函数在同一行。 测试:debug版本,有-g的,屏蔽qt打印输出 有行号,行号跟函数在同一行。 测试:release版本,有-g/-g3,有qt屏蔽打印输出 #DEFINES += QT_NO_DEBUG_OUTPUT #DEFINES += QT_NO_WARN_OUTPUT QMAKE...
即使用-g3编译,addr2line也会返回??:0,gdb回溯工作正常 对于一个较大的项目,我启动了一个小项目来编写一个模块,该模块在stderr上打印堆栈跟踪。我可以捕获异常(信号)并查看堆栈,但是,当我使用addr2line时,我的函数只打印??:0。我读到你需要用-g编译你的程序来获得调试信息。目前,我总是使用-g3进行编译,...