社区
C语言
帖子详情
gdb调试的问题
永远的明日
2011-09-30 11:39:26
我在程序中创建了一个线程,该线程创建一个socket,并连接到服务端,然后不断地用recv()接受数据··
程序直接运行的话,基本没什么问题,但当用gdb调试时,recv()刚开始会返回-1, errno 为 EINTR··,请问这是什么问题呢?
PS:我用signal也没捕获到任何信号!
...全文
211
10
打赏
收藏
gdb调试的问题
我在程序中创建了一个线程,该线程创建一个socket,并连接到服务端,然后不断地用recv()接受数据·· 程序直接运行的话,基本没什么问题,但当用gdb调试时,recv()刚开始会返回-1, errno 为 EINTR··,请问这是什么问题呢? PS:我用signal也没捕获到任何信号!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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上跑得程序·
Android源代码开发和调试环境搭建完整版PPT
对于涉及到C/C++代码的开发,例如JNI开发和安全相关开发,更加建议在Android源代码开发环境进行,这样就可以利用gdb以及gdbclient工具进行调试。这个PPT主要讲Android源代码下载、编译和运行,以及C/C++、Java代码的...
go语言程序-
gdb调试
问题
以前经常用
gdb调试
C/C++程序,当学习golang的时候,发现golang的程序也是支持
gdb调试
的,然而还是遇到一些
问题
。比如说调试etcd程序就遇到如下
问题
: 【
问题
1】 info goroutines,提示找不到Undefined info ...
【
GDB调试
技巧】提高gdb的调试效率
本文介绍了提高 GDB 调试效率的技巧,帮助...此外,还介绍了使用 GDB 脚本自动化调试流程的方法,以及一些常见
问题
的解决方案。通过掌握这些技巧,开发者可以更高效地利用 GDB 进行调试,加快程序开发和调试的进程。
GDB调试
指南(入门,看这篇够了)
写这篇文档的目的是对前面GDB的知识做一次总览,本文为
GDB调试
指南,参考
GDB调试
手册,目前已有的篇目: 启动调试 断点设置 查看源码 单步调试 查看变量 前言 GDB是Linux下非常好用且强大的调试工具。GDB可以调试C...
gdb调试
问题
总结
gdb有个-x参数,后面接一下存储
gdb调试
命令的文本文件,所以可以实现写个文本文件,把一开始必要的断点和调试环境以及运行参数设置写进去,然后用-x参数读入即可: command.txt break main set print pretty ...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章