多线程调试的问题

biihc2000 2005-08-16 11:42:01
我自己手工生成了若干线程,其中有些线程老是出些异常,我就想把这些异常信息写LOG,在IDE的调试环境下似乎一切正常,但在独立运行时,有些线程的异常却没有捕捉到,程序然后就处于无响应状态,请问这是为何?
另外,请大家推荐一些多线程调试方面的书籍,有电子版下载的最好了,多谢.
...全文
136 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChenLiuqing 2005-08-19
  • 打赏
  • 举报
回复
mark
biihc2000 2005-08-19
  • 打赏
  • 举报
回复
我知道遇到控件的线程安全问题,需要使用控件的Invoke方法和是beginInvoke/endInvoke,但是为什么需要这样,并且使用Invoke时,调试相当麻烦,总是不好准确定位错误.请熟悉这方面内容的高手多多指教.
lw8122 2005-08-19
  • 打赏
  • 举报
回复
写日志,我是用自己的函数写的文件,所有错误都能写下来。

不知道你是怎么写的????
biihc2000 2005-08-19
  • 打赏
  • 举报
回复
我昨天以调了半天,发现当出现窗体控件的线程安全性问题时(就是那种报"你不是在创建该控件的线程上操纵该控件"的那种错误),异常就捕捉不到,其它的都还是正常的.不知是什么原因.对窗体控件的线程安全的问题,我老是搞不太明白,不知道是什么原因产生了如此限制(非要在创建控件的那个线程上使用控件)?我应该如何避免遇到此种问题.
wzhnet 2005-08-18
  • 打赏
  • 举报
回复
写日志的地方 估计有问题
biihc2000 2005-08-18
  • 打赏
  • 举报
回复
我在代码中也是如各位所说,加了许多try/catch,然后在catch中记日志,但是只在调试状态下可以捕捉到异常,然后日记也记下了,但在独立运行时却无法捕捉,日志里也没有相应记录,不知是怎么回事.
henryfan1 2005-08-16
  • 打赏
  • 举报
回复
线程的异常好象是不会抛出来的,你必须在线程代码里try在catch中写文件.
iasky 2005-08-16
  • 打赏
  • 举报
回复
mark啊

lw8122 2005-08-16
  • 打赏
  • 举报
回复
这是我进程函数的标准模式:

private void threadFunctionA()
{
try
{
try //估计打开文件可能产生异常
{
... //打开一个文件
}
catch(Exception fileError)
{
writeLog("openfile error in threadFunctionA():"+fileError.message);
}
...... //估计不会产生异常的代码
}
catch(Exception e){
writeLog("unknow error in threadFunctionA():"+e.message);
}
}
这样,通常在程序发生错误时,都会在日志中,找到错误的大概原因。

不过,日志代码太多,很繁琐。 但是,在调试期,一旦出错,就会发些这些代码还是值得的
lw8122 2005-08-16
  • 打赏
  • 举报
回复
线程中,每个函数的代码都包含在try/catch中,全程写日志,且尽量详细一点,至少把函数名写进去。

我的多线程代码,日志代码占到了总代码量的30%,虽然这些代码执行得很少,但是,一旦发现问题,你就可以佷快的从日志中看出大概是哪些代码出问题了,调试起来就很方便。

btw:多线程中,很多不稳定问题是出现在几个线程同时抢一个资源的时候。 这种问题,除了通过日志判断,别无他法。 因为在IDE中调试,跟本不会出这种问题。
linuxyf 2005-08-16
  • 打赏
  • 举报
回复
要确认异常是否捕获没有,再就是你这个线程内得运算是否有陷入死循环得可能,你可以用log4net做日志来分析一下了。

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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