社区
C语言
帖子详情
gdb调试的问题
永远的明日
2011-09-30 11:39:26
我在程序中创建了一个线程,该线程创建一个socket,并连接到服务端,然后不断地用recv()接受数据··
程序直接运行的话,基本没什么问题,但当用gdb调试时,recv()刚开始会返回-1, errno 为 EINTR··,请问这是什么问题呢?
PS:我用signal也没捕获到任何信号!
...全文
230
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上跑得程序·
Android源代码开发和调试环境搭建完整版PPT
Android源代码开发环境与SDK开发环境相比,优势是可以查看和调试系统源代码,包括Java代码和C/C++代码。这对应用开发也是非常有用的,因为在开发中碰到疑难杂症时可以跟踪到系统内部去定位
问题
。对于涉及到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 command: "goroutines". Try "help info". 解决方法:启动gdb后,运行目标程序之前(输入r之前)...
GDB调试
指南(入门,看这篇够了)
写这篇文档的目的是对前面GDB的知识做一次总览,本文为
GDB调试
指南,参考
GDB调试
手册,目前已有的篇目: 启动调试 断点设置 查看源码 单步调试 查看变量 前言 GDB是Linux下非常好用且强大的调试工具。GDB可以调试C、C++、Go、java、 objective-c、PHP等语言。对于一名Linux下工作的c/c++程序员,GDB是必不可少的工具,本篇以C语言来调试。 GDB简介 U...
【
GDB调试
技巧】提高gdb的调试效率
本文介绍了提高 GDB 调试效率的技巧,帮助开发者更快速、更有效地调试程序。首先,讨论了设置断点、单步执行以及查看变量等基本调试功能的使用方法。其次,介绍了使用 GDB 的高级功能,以便更精细地控制程序执行流程并监视变量变化。此外,还介绍了使用 GDB 脚本自动化调试流程的方法,以及一些常见
问题
的解决方案。通过掌握这些技巧,开发者可以更高效地利用 GDB 进行调试,加快程序开发和调试的进程。
gdb调试
问题
总结
1,怎么在gdb开启的时候加入调试命令,如断点、设置运行参数 gdb有个-x参数,后面接一下存储
gdb调试
命令的文本文件,所以可以实现写个文本文件,把一开始必要的断点和调试环境以及运行参数设置写进去,然后用-x参数读入即可: command.txt break main set print pretty run train --solver=models/bvlc_r
C语言
70,036
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章