当前位置: 技术问答>linux和unix
GDB提示没有调试信息如何解决?
来源: 互联网 发布时间:2015-09-12
本文导语: 我是这样使用gcc编译的: gcc -c -Wall -gstabs -W -Wtraditional -ansi -pedantic -O3 在产生可执行程序后,启动gdb,gdb给出没有调试信息,无法进行调试。 于是我再用: gcc -c -Wall -ggdb -W -Wtraditional -ansi -pedantic -O3 在产...
我是这样使用gcc编译的:
gcc -c -Wall -gstabs -W -Wtraditional -ansi -pedantic -O3
在产生可执行程序后,启动gdb,gdb给出没有调试信息,无法进行调试。
于是我再用:
gcc -c -Wall -ggdb -W -Wtraditional -ansi -pedantic -O3
在产生可执行程序后,同样启动gdb,gdb还是给出没有调试信息,无法进行调试。
请问这个问题该如何解决?请高手帮帮忙!谢谢!
gcc -c -Wall -gstabs -W -Wtraditional -ansi -pedantic -O3
在产生可执行程序后,启动gdb,gdb给出没有调试信息,无法进行调试。
于是我再用:
gcc -c -Wall -ggdb -W -Wtraditional -ansi -pedantic -O3
在产生可执行程序后,同样启动gdb,gdb还是给出没有调试信息,无法进行调试。
请问这个问题该如何解决?请高手帮帮忙!谢谢!
|
GCC编译的时候你要加上-g 选项生成供GDB调试使用的相关信息才能使用GDB调试
ie, gcc -g -o exp exp.c
gdb exp
ie, gcc -g -o exp exp.c
gdb exp
|
-ggdb应该就可以。-O3也只会影响一点点运行时的gdb调试与source关联的信息。
如果说是没有调试信息那是比较奇怪的。不知道是不是搂主操作有误。错误信息是什么?
还有是pc平台上吗?
如果说是没有调试信息那是比较奇怪的。不知道是不是搂主操作有误。错误信息是什么?
还有是pc平台上吗?
|
在源文件目录执行gdb的话或者在如果调用编译命令的目录就是源目录的话,你的所有源码不需要关联。如果不在源目录下,使用gdb>dir
来关联源码。具体几个文件你不用管,设断点有可以用:
gdb>break :行号
或
gdb>break [类名::]函数名称 注:break 运行时会定位到包含main的程序文件中的行号。
都会自动定位到你指定的源码行。
gdb>list显示当前堆栈框的+5 -- -5行源码。
设置好断点后,
gdb>run 运行你的程序
来关联源码。具体几个文件你不用管,设断点有可以用:
gdb>break :行号
或
gdb>break [类名::]函数名称 注:break 运行时会定位到包含main的程序文件中的行号。
都会自动定位到你指定的源码行。
gdb>list显示当前堆栈框的+5 -- -5行源码。
设置好断点后,
gdb>run 运行你的程序
|
建议调试的时候不要用-O3选项,另外,给出GDB的出错信息
|
GCC编译的时候你要加上-g 选项生成供GDB调试使用的相关信息。
|
不-g其实也可以调试只是没有行号!文件名等等!
估计是不是-o3优化厉害了。呵呵
估计是不是-o3优化厉害了。呵呵
|
一是加上-g选项,二是不用-o3,调试时候不用优化,调试后也不要用3级优化,一般2级就可以了。