gdb调试的问题

永远的明日 2011-09-30 11:39:26
我在程序中创建了一个线程,该线程创建一个socket,并连接到服务端,然后不断地用recv()接受数据··
程序直接运行的话,基本没什么问题,但当用gdb调试时,recv()刚开始会返回-1, errno 为 EINTR··,请问这是什么问题呢?

PS:我用signal也没捕获到任何信号!
...全文
211 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AndyZhang 2011-10-09
  • 打赏
  • 举报
回复
你有没有初始化套接字,就是赋值版本号信息之类的,makeword。。。
永远的明日 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq120848369 的回复:]
EINTR是慢速系统调用被信号中断产生的错误,至于是什么信号没法说。
可以在Main头部sigprocmask阻塞掉所有的信号。
[/Quote]
怎么阻塞?我阻塞掉0~64,还是不行
  • 打赏
  • 举报
回复
[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也未打印任何信号信息?
  • 打赏
  • 举报
回复
这个是不会接收到的,我之前也遇到过这种问题

这种问题也只有在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
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gyjudrnrso 的回复:]

不好意思,上面的描述有问题··创建一个线程时是没有问题的,创建3~4个线程时才又问题?难道这是虚拟机的问题?我在vmware上跑得程序·
[/Quote]
你用我说的试试不就知道了么?我在我们公司项目里面就是那么做的。跟几个线程没关系,这种情况偶然性很大,没准什么时候在gdb下就产生一个中断,比如断点、切换等
永远的明日 2011-09-30
  • 打赏
  • 举报
回复
不好意思,上面的描述有问题··创建一个线程时是没有问题的,创建3~4个线程时才又问题?难道这是虚拟机的问题?我在vmware上跑得程序·

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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