linux怎么进入DEBUG,求助

zhanguo777 2010-01-01 02:30:34
我正在linux下编C++程序,不知道怎么debug
求助
...全文
992 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
huliang66 2010-01-05
  • 打赏
  • 举报
回复
例如源文件为main.c

gcc -o main.c 设置输出的文件
gcc -v main.c 查看编译过程
gcc-x 'c'main.c 设置编译的语言

编译过程控制:
gcc -E -o a.cxx main.c 控制预处理过程
gcc -S -o a.s main.c 生成汇编代码
gcc -c -o a.o main.c 生成目标代码
gcc a.o -o aa.out 生成可执行文件


gdb 调试程序
gcc -g -o a.debug main.c -g生成调试文件
gdb 启动gdb
list 查看代码。list 1查看第一个断点前,按回车到下一个断点
break 6 在第六行添加断点
info breakpoint 查看所有断点
run 运行程序,开始调试
next 程序运行到下一行
continue 程序运行到下一断点
print x 显示变量x的值
q 退出gdb
delphiwcdj 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cattycat 的回复:]
编译的时候加一个  -g 选项,生成的可执行文件就可以调试。然后 gdb 你的程序名就进入debug模式了。
help命名可以列出所有帮助信息。

想看那个具体文件的代码,用 list 命令,或者 break 那个函数可以进入那个函数调试
[/Quote]
up
cx510158746 2010-01-01
  • 打赏
  • 举报
回复
逛逛!
delphiwcdj 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 akirya 的回复:]
还有一些可视化的 ddd
kdevelop之类的啥
[/Quote]
CodeBlocks
wanjiwz 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhanguo777 的回复:]
可以加我的QQ,79927112吗。多谢了
[/Quote]
我先出去吃饭了~~回来再聊
wanjiwz 2010-01-01
  • 打赏
  • 举报
回复
你的gp.cpp里面没有main函数吧,g++ -g xxx -o gp是直接生成可执行文件了,如果你只是要编译gp.cpp应该用
g++ -g -c gp.cpp,会自动生成gp.o,或者你指定输出的文件名g++ -g -c gp.cpp -o gp.o
zhanguo777 2010-01-01
  • 打赏
  • 举报
回复
可以加我的QQ,79927112吗。多谢了
zhanguo777 2010-01-01
  • 打赏
  • 举报
回复
这是我的makefile
我 gdb PLBM 进去了,能查看代码了
我在GDB里面,run的结果是
========== Read Input ==========
... Number of Buffers: 0
... Number of Components: 0
Time for Read Input: 0 seconds
1回目のiterationです。
Upper Bound = 0

======= Output Results =======
Check Overlap
Overlap Size: 0

Program exited normally.


在外面执行的结果是$ ./PLBM input/clk5
========== Read Input ==========
... Number of Buffers: 379
... Number of Components: 21262
Time for Read Input: 0.06 seconds
Segmentation fault

Segmentation fault应该是有错误的意思吧,
我想问的是,怎么可以在gdb里面带这数据执行呢
这个问题怎么解决呢
zhanguo777 2010-01-01
  • 打赏
  • 举报
回复
EXE = PLBM

cc = gcc


CC = g++
LIBS = -lm
CFLAGS = -Wall -O2
DFLAGS = -Werror -Wall -W \
-Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings \
-Wswitch -Wshadow -Wcast-align -Wuninitialized \
-Wchar-subscripts -Winline -ansi \
-pedantic


# ============= Use LEDA =========== #
LEDAROOT = /usr/local/share/LEDA
LIBS = -lG -lL -lm -L$(LEDAROOT)
CFLAGS = -Wall -O -I$(LEDAROOT)/incl


$(EXE): main.o gp.o timer.o
$(CC) $(CFLAGS) -o $(EXE) main.o gp.o timer.o $(LIBS)

#$(EXE): main.o gp.o qualex.o eigen.o graph.o bool_vector.o greedy_clique.o refiner.o gp_mis.o preproc_clique.o mdv.o timer.o
# $(CC) $(LINKFLAGS) $(CFLAGS) -o $(EXE) main.o gp.o qualex.o eigen.o graph.o bool_vector.o greedy_clique.o refiner.o gp_mis.o preproc_clique.o mdv.o timer.o $(LAPACKLIB) $(BLASLIB) $(MISLIBS)


main.o: main.cpp timer.h
$(CC) $(CFLAGS) -c main.cpp

gp.o: gp.cpp gp.h
$(CC) $(CFLAGS) -c gp.cpp

timer.o: timer.cpp timer.h
$(CC) $(CFLAGS) -c timer.cpp



clean:
rm -f *.o $(EXE) core

compact: $(EXE)
strip $?


wanjiwz 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhanguo777 的回复:]
我可以,gdb gp.o 进入可以看到 gp.cpp的代码

[/Quote]
呃~~我刚才一直想问你为什么有Makefile了还要自己g++ -g xxx -o gp,可以把Makefile贴出来一下吗?gdb的用法建议你找一篇文章从头到尾看一遍。
yangch_nhcmo 2010-01-01
  • 打赏
  • 举报
回复
用gdb调试,具体用法google
eTouX 2010-01-01
  • 打赏
  • 举报
回复
可以看看debug的文章
cattycat 2010-01-01
  • 打赏
  • 举报
回复
编译的时候加一个 -g 选项,生成的可执行文件就可以调试。然后 gdb 你的程序名就进入debug模式了。
help命名可以列出所有帮助信息。

想看那个具体文件的代码,用 list 命令,或者 break 那个函数可以进入那个函数调试
zhanguo777 2010-01-01
  • 打赏
  • 举报
回复
我可以,gdb gp.o 进入可以看到 gp.cpp的代码
zhanguo777 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wanjiwz 的回复:]
cc -g gp.cpp -o gp是编译连接一步到位,直接生成可执行文件gp
make时执行什么操作就要看你make怎么写了

cc -g gp.cpp -o gp之后有一堆错误可能是你的代码有问题,或者你的cc指向了gcc而不是g++,用gcc编译C++的代码没问题,但是连接时必须要用g++
[/Quote]

多谢
不好意思,再麻烦一下
我的里面有5个文件。main.cpp , gp.cpp , gp.h , timer.h , timer.cpp
我要 g++ -g xxx -o gp 编译那个文件是对的啊,
编译那个文件都有不是错误的错误。
我只是输入make 的话,是生成一个PLBM文件的
gdb PLBM 是可以进去的,但是只能查看,main.cpp的代码,我想debug gp.cpp的代码。怎么办呢
拜托了
wanjiwz 2010-01-01
  • 打赏
  • 举报
回复
cc -g gp.cpp -o gp是编译连接一步到位,直接生成可执行文件gp
make时执行什么操作就要看你make怎么写了

cc -g gp.cpp -o gp之后有一堆错误可能是你的代码有问题,或者你的cc指向了gcc而不是g++,用gcc编译C++的代码没问题,但是连接时必须要用g++
zhanguo777 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wanjiwz 的回复:]
引用 4 楼 zhanguo777 的回复:
多谢大家帮助,我是输入gdb,还是输入gdb gp.cpp还是输入gdb PLBM    那种类型是正确的输入
我进入gdb  输入file gp.cpp  为什么打不开文件
请举个例子说明
拜托了

调试的是生成的可执行文件,比如你生成的可执行文件叫gp,那么就
gdb gp
[/Quote]

多谢,生成可执行文件是, cc -g gp.cpp -o gp 还是 make 我输入make 之后 就生成文件PLBM
我的学长告诉我make 是编译,我make 之后没有error
为什么cc -g gp.cpp -o gp 之后,有了一堆错
请指教,拜托了
我是新手
wanjiwz 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhanguo777 的回复:]
多谢大家帮助,我是输入gdb,还是输入gdb gp.cpp还是输入gdb PLBM    那种类型是正确的输入
我进入gdb  输入file gp.cpp  为什么打不开文件
请举个例子说明
拜托了
[/Quote]
调试的是生成的可执行文件,比如你生成的可执行文件叫gp,那么就
gdb gp
zhanguo777 2010-01-01
  • 打赏
  • 举报
回复
多谢大家帮助,我是输入gdb,还是输入gdb gp.cpp还是输入gdb PLBM 那种类型是正确的输入
我进入gdb 输入file gp.cpp 为什么打不开文件
请举个例子说明
拜托了
sicxun 2010-01-01
  • 打赏
  • 举报
回复
g++ -ggdb -o xx
gdb xx

或用codeblocks
一个ide昨天刚试过很好用的
图形化的调试
比vs弱一点点而已
加载更多回复(2)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧