如何让c#程序崩溃

hjl0508 2014-06-16 09:15:17
我现在想测试在程序崩溃时的情况,在c++程序中访问空指针就能让程序崩溃,出现这个图,经测试后边的线程不再运行了

可是在c#程序下我越界访问数组,或者除以0会出现这个图,测试到后边的线程还在运行,是不是c#程序崩溃都不会影响,其他的线程?如果不是的话如何让程序崩溃时和上边的c++程序一样其他的线程也停止运行?
...全文
1378 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
penguin_ku 2014-06-24
  • 打赏
  • 举报
回复
直接弄个waitchdog,弄个信号,对目标进程发起,目标主进程接到之后对所有业务线程发起信号,这样可以检测目标进程是否出问题了,目标进程里面十个业务线程目前几个挂了,几个正常,如果超出额定范围,卡擦掉目标进程,重启。基本上目前华为中兴爱立信等等给运营商做得软件全这么搞的,当然他们可能不是进程信号,也可能是socket心跳,还可能是日志检测,大约意思都一样。
於黾 2014-06-18
  • 打赏
  • 举报
回复
引用 27 楼 SwingingMace 的回复:
做一个时钟,每0.001秒读一次1000条数据,窗口就会死机。但是不会抛任何异常。这种情况你如何判断崩溃?
主线程自身繁忙,谁来做判断啊... 要做判断起码有个做判断的第三方. 抛异常是因为调试器在起作用.如果你是release版,估计什么都不会报,程序直接就退出了.
梦吟情诗 2014-06-18
  • 打赏
  • 举报
回复
1.调试模式,和正式运行模式是不一样的,调试时在DEBUG下面另外有文件支持调试,正式RELEASE编译后,多余的东西就不需要了。 2..NET号称线程安全,有些地方是有保护的,怎么可能和C++里面完全一样
tcmakebest 2014-06-18
  • 打赏
  • 举报
回复
C# 的程序本身是在.net framework 环境中运行的,现场这个提示可能不是严重的错误. 想要崩溃很简单,写如下一个方法并调用就好了,无限递归导致栈溢出: void abc() { abc(); }
SwingingMace 2014-06-18
  • 打赏
  • 举报
回复
做一个时钟,每0.001秒读一次1000条数据,窗口就会死机。但是不会抛任何异常。这种情况你如何判断崩溃?
  • 打赏
  • 举报
回复
设置为后台线程,就不会继续运行了。
Thread.IsBackground=true
默认开启的线程为前台线程。
largeskymengsk 2014-06-17
  • 打赏
  • 举报
回复
你说的这个东西,还和.net版本有关, 不同的版本,对未捕捉的异常是不一样的.
乌月龙井 2014-06-17
  • 打赏
  • 举报
回复
千奇百怪的需求
royler 2014-06-17
  • 打赏
  • 举报
回复
debug和release生成的不一样,出现的错误情况也不一样
L_lxc 2014-06-16
  • 打赏
  • 举报
回复
楼主 代码里加上 try...catch 看看是啥东东,然后对应处理就不会弹出来了
hjl0508 2014-06-16
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
我这儿还是不行,看八楼我截的图
hjl0508 2014-06-16
  • 打赏
  • 举报
回复
引用 9 楼 starfd 的回复:
错误可以被拦截,就不会造成异常,你可以通过下面的代码在最外层对主线程异常和异步线程异常拦截,然后他们都执行相同的一段代码逻辑,就是你要的重启(用Process新打开当前应用,然后退出当前应用)
static void Main() 
		{
            // TODO: Handle unhandled exceptions

            Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
在窗口的程序中 没有main()这个函数,这两行代码放到哪儿比较好?
  • 打赏
  • 举报
回复
错误可以被拦截,就不会造成异常,你可以通过下面的代码在最外层对主线程异常和异步线程异常拦截,然后他们都执行相同的一段代码逻辑,就是你要的重启(用Process新打开当前应用,然后退出当前应用)
static void Main() 
		{
            // TODO: Handle unhandled exceptions

            Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
hjl0508 2014-06-16
  • 打赏
  • 举报
回复
我这儿还是不行,还是会出现这个弹出框,不知道是怎么回事,说是不是我系统设置的问题?
  • 打赏
  • 举报
回复
感觉要终止进程
exception92 2014-06-16
  • 打赏
  • 举报
回复
exception92 2014-06-16
  • 打赏
  • 举报
回复
引用 4 楼 hjl0508 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] 在C# 里,你也试试 空引用
不太会用c#,这个怎么空引用?访问越界的数组算不算呢?我试了访问越界数组是不会影响其他线程的。[/quote]

 object temp2 = null;
            string temp1 = temp2.ToString();
hjl0508 2014-06-16
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
在C# 里,你也试试 空引用
不太会用c#,这个怎么空引用?访问越界的数组算不算呢?我试了访问越界数组是不会影响其他线程的。
hjl0508 2014-06-16
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
不同线程之间的异常本来不应该会互相影响,但当你的Application结束时,其它线程肯定也就结束了 Net给这个提示的时候就是让你确认是否崩溃了问题,那么大的忽略看不到么???
我是想测试我写的一个程序在无人值守的情况下如果程序崩溃了,可以将它重启。。。。而且是通过程序里的线程来进行交互的,我是想测知道c#程序出什么错误才能让其他线程也停止运行。。。。
  • 打赏
  • 举报
回复
不同线程之间的异常本来不应该会互相影响,但当你的Application结束时,其它线程肯定也就结束了 Net给这个提示的时候就是让你确认是否崩溃了问题,那么大的忽略看不到么???
加载更多回复(12)

110,580

社区成员

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

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

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