社区
Linux_Kernel
帖子详情
请问gdb多线程调试无法退出的问题
youzy
2011-08-19 07:19:52
我在用gdb多线程调试的时候,有时候用p打印变量,有时候变量名字输错了,就卡住了,按Crtl+C也不管用。请问高手该如何办?
...全文
319
9
打赏
收藏
请问gdb多线程调试无法退出的问题
我在用gdb多线程调试的时候,有时候用p打印变量,有时候变量名字输错了,就卡住了,按Crtl+C也不管用。请问高手该如何办?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
youzy
2011-08-31
打赏
举报
回复
[Quote=引用 7 楼 xunxun1982 的回复:]
gdb版本?
我这里怎么是打错名字后显示
上下文没这个变量类似的提示
然后你可以进行其他操作
难道lz用attach的方法调试的么?
[/Quote]
多线程的时候出现这个问题,单线程调试是正常的。寻求好的方法
nehc
2011-08-30
打赏
举报
回复
听说过gdb调试多线程时会出问题,甚至不能调试
学习 ...
youzy
2011-08-29
打赏
举报
回复
自己顶一下,有没有人知道的,给回答一下啊
xunxun
2011-08-29
打赏
举报
回复
gdb版本?
我这里怎么是打错名字后显示
上下文没这个变量类似的提示
然后你可以进行其他操作
难道lz用attach的方法调试的么?
youzy
2011-08-23
打赏
举报
回复
[Quote=引用 4 楼 cqbamboo 的回复:]
引用 3 楼 jernymy 的回复:
另外开一个console
然后kill掉那个gdb
kill -9 pid
or
killall gdb
该方法可以举一反三,活学活用,但要小心为妙!
[/Quote]
这个我指导,那不是gdb都退出来了,我想要问的是有没有办法让gdb不退出来的办法呢。
jernymy
2011-08-20
打赏
举报
回复
另外开一个console
然后kill掉那个gdb
kill -9 pid
or
killall gdb
youzy
2011-08-20
打赏
举报
回复
试过了,还是不起作用啊
小魔菇
2011-08-20
打赏
举报
回复
ctrl + d
cqbamboo
2011-08-20
打赏
举报
回复
[Quote=引用 3 楼 jernymy 的回复:]
另外开一个console
然后kill掉那个gdb
kill -9 pid
or
killall gdb
[/Quote]
该方法可以举一反三,活学活用,但要小心为妙!
GDB
调试
流程及命令大全
GDB
(GNU
调试
器)是一种功能强大的命令行
调试
工具,常用于C、C++、汇编等编程语言的
调试
。它支持多种平台和格式,可以在Linux、UNIX和Windows等操作系统上使用。
GDB
提供了很多
调试
功能,包括设置断点、单步执行、查看变量、回溯函数调用堆栈等。通过这些功能,程序员可以有效地诊断和修复程序中的错误。 在使用
GDB
时,您需要在终端或控制台中启动您的程序,并使用以下命令之一来连接到其进程:`
gdb
` 或 `
gdb
--pid
`。一旦连接成功,您就可以使用一系列
GDB
命令来与程序进行交互,如: - `break` 设置断点 - `run` 运行程序 - `step` 单步执行程序 - `print` 打印变量值 - `backtrace` 回溯当前函数调用堆栈 - `continue` 继续程序的执行 - `quit`
退出
GDB
除了基本
调试
功能外,
GDB
还支持高级功能,如内存分析、线程
调试
、远程
调试
等等。需要注意的是,在使用
GDB
过程中,您需要确保采取适当的安全措施,以避免程序运行过程中可能出现的不良影响。
gdb
多线程
调试
在使用
GDB
进行
多线程
调试
时,你需要注意一些特殊的命令和技巧,以有效地调查和解决
多线程
程序中的
问题
。在
多线程
程序中,需要格外小心并确保在
调试
时理解每个线程的状态和相互作用,以便有效地诊断和修复
问题
。你可以使用
GDB
的各种命令来检查变量、回溯堆栈、查看内存内容等。命令查看当前程序中的所有线程。命令设置观察点,以便在某个变量的值发生变化时触发断点。命令来设置并行观察窗口,以便同时查看不同线程的堆栈和变量。通过使用这些命令,你可以分析程序崩溃的原因并进行
调试
。命令来查看当前线程的寄存器值,或使用。
GDB
调试
Linux C / C++
# 论
调试
能力在开发程序中的重要性
调试
是开发流程中一个非常重要的环境,每个程序员都应具备
调试
代码的能力,尤其对于从事 Linux C/C++ 开发的用户,必须具备熟练使用
GDB
调试
器的能力。俗话说你有十分技能,那么其中包含了六分开发能力和四分
调试
能力。这套
GDB
入门视频教程能够做到深入浅出,让同学们能够快速学会使用
GDB
调试
程序。#
GDB
简介 GNU symbolic debugger,简称
GDB
调试
器,是 Linux 平台下最常用的一款程序
调试
器。
GDB
编译器通常以
gdb
命令的形式在终端(Shell)中使用,它有很多选项,这是我们要重点学习的。 发展至今,
GDB
调试
器已经对 C、C++、Go、Objective-C、OpenCL、Ada 等多种编程语言提供了支持。实际场景中,
GDB
更常用来
调试
C 和 C++ 程序,虽然 Linux 平台下有很多能编写 C、C++ 代码的集成开发工具(IDE),但它们
调试
代码的能力往往都源自
GDB
调试
器。
gdb
调试
多进程
多线程
由于bianry2是在binary1中调用的,不适合使用“
gdb
binary”的形式进行debug,只能在程序运行之后找到birnary2的pid,然后通过pid
调试
。我的办法是结合进程的log,大概定位到
问题
代码,然后在对应函数里面wait一段时间,这样我们在用
gdb
之前可以先等上一段时间,确定代码已经进入
问题
函数再去用
gdb
调试
。进入
调试
终端后看到的都是主进程的上下文,而
问题
出在其中一个线程,所以要再进入对应线程
调试
终端。这个时候就可以开始
调试
了。
使用
gdb
调试
多线程
的方法
多线程
死锁的
调试
方法: kill -11 得到 coredump 然后分析 在出现死锁时,kill -11 得到 coredump 然后分析 打印日志 把日志写的详细一些,可以反映出程序运行时的真是情况
gdb
gdb
法有个致命的缺陷,就是它打乱了
多线程
的真是调度顺序。
多线程
特定的错误往往是由于缺乏对共享数据的保护而导致的竞争状态的出现,而竞争状态的出现是具有偶然性的,取决于特定的调度次序;而当设置断点时,实际是将调度器的权限由系统交给
调试
者。这样在
调试
环境重现的,可能并不是bug时的真实情况
Linux_Kernel
4,436
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章