首页
社区
课程
招聘
[求助]SetThreadContext异常处理
发表于: 2015-3-3 10:06 5690

[求助]SetThreadContext异常处理

2015-3-3 10:06
5690
问题是这样的:
调用:
SetThreadContext(GetCurrentThread(), &mycontext);我在mycontext使用malloc创建了私有堆栈。
之后,在新的线程环境中:

 _try
   {
     listen(sockfd,5); //listen会产生一个There are no more endpoints available from the endpoint mapper.异常
   }
   _except( EXCEPTION_EXECUTE_HANDLER )
   {
     printf( "Caught the exception in main()\n" );
   }

现在问题是_try,_except结构根本捕获不到任何异常,程序运行提示:
Unhandled exception at 0x7c812afb in st_thread.exe: 0x000006D9: There are no more endpoints available from the endpoint mapper.

然后退出了。

现在猜测很有可能是mycontext使用私有堆栈,导致找不到异常处理函数,那应该怎么处理呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 19
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如果程序中进行socket编程,调用listen函数,而Windows Firewall/Internet Connection Sharing (ICS)没启动,就会报这个警告.

另外可以换 VEH 试试 是否可捕捉到.
2015-3-3 10:24
0
雪    币: 191
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
谢谢IMisterH,我试试VEH
是的,防火墙没有开启。
我在主线程中调试这段代码也会报异常,程序可以顺利往下执行。我想在新的线程环境中达到这种效果。
2015-3-3 10:30
0
雪    币: 19
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
建立socket连接时使用调试模式就会出现这个问题,把服务开起来,就不会提示了
2015-3-3 10:38
0
雪    币: 19
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
在微软介绍里面找到的
引:To resolve this issue, set the Windows Firewall Service to Automatic, and then start the service.
http://support.microsoft.com/kb/KbView/2123653

问题产生应该是
listen函数当中调用NdrClientCall2 函数产生的
2015-3-3 10:45
0
雪    币: 191
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
谢谢!
现在关键问题是,能不能在新的线程环境中加入异常处理,不然万一其他函数产生异常也没法处理,这样会导致程序出问题。
2015-3-3 11:14
0
雪    币: 19
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
AddVectoredExceptionHandler 用这个接管,SEH是针对线程的.
或者 AddVectoredContinueHandler 另外理论上
SetUnhandledExceptionFilter 也可以接管到
在程序启动前时调用就好.
2015-3-3 11:26
0
雪    币: 191
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
测试发现,AddVectoredExceptionHandler 是有效的。 但是在异常处理函数中我没法处理掉这个异常。
There are no more endpoints available from the endpoint mapper
不知道操作系统是怎么处理掉的。
2015-3-4 12:19
0
游客
登录 | 注册 方可回帖
返回
//