社区
C语言
帖子详情
gdb调试的问题
永远的明日
2011-09-30 11:39:26
我在程序中创建了一个线程,该线程创建一个socket,并连接到服务端,然后不断地用recv()接受数据··
程序直接运行的话,基本没什么问题,但当用gdb调试时,recv()刚开始会返回-1, errno 为 EINTR··,请问这是什么问题呢?
PS:我用signal也没捕获到任何信号!
...全文
286
10
打赏
收藏
gdb调试的问题
我在程序中创建了一个线程,该线程创建一个socket,并连接到服务端,然后不断地用recv()接受数据·· 程序直接运行的话,基本没什么问题,但当用gdb调试时,recv()刚开始会返回-1, errno 为 EINTR··,请问这是什么问题呢? PS:我用signal也没捕获到任何信号!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
AndyZhang
2011-10-09
打赏
举报
回复
你有没有初始化套接字,就是赋值版本号信息之类的,makeword。。。
永远的明日
2011-10-09
打赏
举报
回复
[Quote=引用 8 楼 qq120848369 的回复:]
EINTR是慢速系统调用被信号中断产生的错误,至于是什么信号没法说。
可以在Main头部sigprocmask阻塞掉所有的信号。
[/Quote]
怎么阻塞?我阻塞掉0~64,还是不行
高性能架构探索
2011-09-30
打赏
举报
回复
[Quote=引用 2 楼 gyjudrnrso 的回复:]
引用 1 楼 namelij 的回复:
这个是不会接收到的,我之前也遇到过这种问题
这种问题也只有在gdb调式的过程中才会有,因为gdb调试时候遇到断点或者其他信息的话,就会产生EINTR中断
解决办法:
do
{
int ret = ..//也就是你返回-1的那个操作
...其它操作
}
while(ret == -1 && e……
[/Quote]
不会有问题,或者你只在gdb调试的时候这样做,如果在非gdb下,那就去掉
永远的明日
2011-09-30
打赏
举报
回复
[Quote=引用 1 楼 namelij 的回复:]
这个是不会接收到的,我之前也遇到过这种问题
这种问题也只有在gdb调式的过程中才会有,因为gdb调试时候遇到断点或者其他信息的话,就会产生EINTR中断
解决办法:
do
{
int ret = ..//也就是你返回-1的那个操作
...其它操作
}
while(ret == -1 && errno == EINTR);
这样就能解决你g……
[/Quote]
这样直接忽略掉EINTR,会不会有问题呢?gdb中捕获的信号不是会pass到程序中吗?
我在gdb 中设置 :handle all print ,gdb也未打印任何信号信息?
高性能架构探索
2011-09-30
打赏
举报
回复
这个是不会接收到的,我之前也遇到过这种问题
这种问题也只有在gdb调式的过程中才会有,因为gdb调试时候遇到断点或者其他信息的话,就会产生EINTR中断
解决办法:
do
{
int ret = ..//也就是你返回-1的那个操作
...其它操作
}
while(ret == -1 && errno == EINTR);
这样就能解决你gdb中的EINTR问题
qq120848369
2011-09-30
打赏
举报
回复
EINTR是慢速系统调用被信号中断产生的错误,至于是什么信号没法说。
可以在Main头部sigprocmask阻塞掉所有的信号。
乔巴好萌
2011-09-30
打赏
举报
回复
也不一定是多线程的问题
当数据很大的时候 有时会有这个 直接跳过去就好
乔巴好萌
2011-09-30
打赏
举报
回复
EINTR是一个慢中断
你可以在recv语句里
这样判断
if recv_length == -1
if errno == EINTR || errno == EEWOULDBLOCK || errno == EAGAIN
continue
else
break
高性能架构探索
2011-09-30
打赏
举报
回复
[Quote=引用 4 楼 gyjudrnrso 的回复:]
不好意思,上面的描述有问题··创建一个线程时是没有问题的,创建3~4个线程时才又问题?难道这是虚拟机的问题?我在vmware上跑得程序·
[/Quote]
你用我说的试试不就知道了么?我在我们公司项目里面就是那么做的。跟几个线程没关系,这种情况偶然性很大,没准什么时候在gdb下就产生一个中断,比如断点、切换等
永远的明日
2011-09-30
打赏
举报
回复
不好意思,上面的描述有问题··创建一个线程时是没有问题的,创建3~4个线程时才又问题?难道这是虚拟机的问题?我在vmware上跑得程序·
如何使用
GDB调试
崩溃
问题
本文详细介绍了如何使用GDB这个强大的调试工具来处理软件开发中的崩溃
问题
,包括设置断点、查看变量值、执行步骤以及堆栈跟踪等内容,旨在提升开发者定位和修复错误的能力。,
用
gdb调试
死锁的
问题
。
本文介绍用
gdb调试
死锁
问题
。先给出有死锁
问题
的代码,阐述死锁形成原因,接着说明
gdb调试
死锁程序的具体步骤,分析死锁状态并给出解决方案。还解释了gdb设置断点时提示相关
问题
的含义、选项说明及选择方法。
gdb调试
问题
总结
本文总结了
gdb调试
时如何在启动时添加调试命令,如设置断点和运行参数。通过使用-x参数加载包含调试指令的文本文件,可以方便地预定义调试环境。此外,针对save breakpoints后运行时遇到的
问题
,提出了在main函数处先设置断点并运行程序,再设置其他断点的解决方案。
附加
gdb调试
遇到
问题
本文主要介绍了在VSCode中附加
GDB调试
遇到授权
问题
的解决方法。在Linux上普通用户使用GDB附加进程可能失败,可通过三种方法解决,如以超级用户身份运行命令等。此外,对于Docker Linux容器,创建时需添加权限以允许使用GDB附加进程。
为什么调试很重要?
gdb调试
分析
问题
调试是软件开发的关键环节,涉及
问题
定位、重现、分析和解决。文章介绍了调试的定义、分类,强调了其在确保代码质量和稳定性方面的重要性。调试步骤包括定位
问题
、重现
问题
、分析
问题
、解决
问题
,以及使用断点、日志等技巧。此外,还提供了一个简单的
GDB调试
C++代码的示例。
C语言
70,038
社区成员
243,247
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章