Articles of 未处理exception

C中没有C ++的exception处理

Linux是否提供了C中的exception处理而不使用C ++? 或者,什么可能是实现这种exception处理的最佳方式? 目标是避免检查每个被调用的函数的返回码,而是使用C ++中的线程安全且便于携带的方法。

.eh_frame和.eh_frame_hdr部分存储的是什么?

我知道,在使用支持exception的语言(如C ++)时,必须向运行时环境提供附加信息,以描述在处理exception期间必须展开的调用帧。 此信息包含在对象文件的特殊部分中,例如.eh_frame和.eh_frame_hdr 。 但是,这些部分存储了什么样的数据结构呢? 我的意思是,他们可以通过使用任何C结构? 他们和GNU汇编代码中的.cfi语句(如.cfi_startproc , .cfi_endproc , .cfi_offset , .cfi_def_cfa_offset , .cfi_personality和.cfi_lsda )有什么关系? 如果他们这样做,这些条款中的每一个在这些部分中造成了什么? .eh_frame_hdr部分与.eh_frame之一有什么关系? 我希望尽可能多的使用C结构的解释。 谢谢。

为什么我的信号处理程序(抛出exception)不止触发一次?

我正在尝试使用sigaction设置exception处理程序。 它适用于第一个例外。 但是sigaction处理程序在第一个exception之后不会被调用,并且第二个信号发生时程序会突然结束。 #include <iostream> #include <signal.h> #include <exception> #include <string.h> typedef void (*SigactionHandlerPointer)(int iSignal, siginfo_t * psSiginfo, void * psContext); using namespace std; void SigactionHookHandler( int iSignal, siginfo_t * psSiginfo, void * psContext ) { cout << "Signal Handler Exception Caught: std::exception — signal : " << iSignal << " from SigactionHookHandler()" << endl; […]

为什么linux内核使用陷阱门来处理divide_errorexception?

在内核2.6.11.5中,除零exception处理器被设置为: set_trap_gate(0,&divide_error); 根据“了解Linux内核”,英特尔陷阱门不能被用户模式进程访问。 但是用户模式进程很可能也会产生divide_error 。 那么为什么Linux以这种方式实现呢? [编辑]我认为问题仍然是开放的,因为set_trap_gate()设置IDT条目的DPL值为0,这意味着只有CPL = 0(读取内核)代码可以执行它,所以我不清楚这个处理程序可能是从用户模式调用: #include<stdio.h> int main(void) { int a = 0; int b = 1; b = b/a; return b; } 这是用gcc div0.c编译的。 而./a.out的输出是: 浮点exception(核心转储) 所以这看起来不像是由0陷阱代码处理的。

从catch块获取回溯

我正在使用backtrace从exception被引发的地方获取信息。 在我的exception的构造函数中,我将回溯存储在std :: string中,并在catch块中为此types的exception打印此回溯。 但我想知道,是否有可能以某种方式在其他exceptiontypes的catch块中获得相同的回溯?

java3D libconfiguration问题

香港专业教育学院遇到一些麻烦configurationjava3D与我的IDE环境… 我已经下载了j3d-1_5_2-linux-i586.zip,并解压j3dcore.jar,j3dutils.jar,vecmath.jar,libj3dcore-ogl.so,libj3dcore-ogl-cg.so并将它们全部添加为“参考库”我的项目文件夹。 这摆脱了我得到的任何编译警告,但是当我编译和运行应用程序时,我得到以下exception! Exception in thread "main" java.lang.UnsatisfiedLinkError: no j3dcore-ogl in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681) at java.lang.Runtime.loadLibrary0(Runtime.java:840) at java.lang.System.loadLibrary(System.java:1047) at javax.media.j3d.NativePipeline$1.run(NativePipeline.java:231) at java.security.AccessController.doPrivileged(Native Method) at javax.media.j3d.NativePipeline.loadLibrary(NativePipeline.java:200) at javax.media.j3d.NativePipeline.loadLibraries(NativePipeline.java:157) at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:987) at javax.media.j3d.VirtualUniverse.<clinit>(VirtualUniverse.java:299) at Hello3d.<init>(Hello3d.java:10) at Hello3d.main(Hello3d.java:18) 这里也是对源代码的简要介绍。 注意:一旦Eclipse被添加为引用库,Eclipse会自动使用Ctrl + Shift + O自动引入导入库path。 import javax.media.j3d.BranchGroup; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.universe.SimpleUniverse; public class Hello3d { public Hello3d(){ SimpleUniverse universe […]

Python:获取WindowsError而不是IOError

我想在Windows 8上用Python 2.7.6来理解exception。 这是我正在testing的代码,目的是在My_New_Dir上创build一个新的目录。 如果该目录已经存在,我想删除整个目录及其内容,然后创build一个新的目录。 import os dir = 'My_New_Dir' try: os.mkdir(dir) except IOError as e: print 'exception thrown' shutil.rmtree(dir) os.mkdir(dir) 事情是,这个例外从不抛出。 代码工作正常,如果目录不存在,但如果该目录确实存在,那么我得到的错误: WindowsError:[错误183]该文件已存在时无法创build文件:'My_New_Dir' 但根据os.mkdir()的Python文档, 如果该目录已经存在,则引发OSError。 那么为什么会抛出Windows错误,而不是Pythonexception呢?

Windows中Paint事件中的exception和访问冲突

执行一些新的代码后,我的C ++应用程序开始performance奇怪(屏幕更新不正确或不完整,有时根本没有屏幕更新)。 过了一段时间,我们发现新代码导致了访问冲突。 奇怪的是,应用程序只是继续运行(但与不正确的屏幕更新)。 起初我们认为这个问题是由“try-catch(…)”构造(由一个过于活跃的前同事放在那里)引起的,但几个小时后(仔细检查调用堆栈,添加了许多断点,… )我们发现,如果在绘画事件中存在访问冲突,Windows会捕获它,并继续运行该应用程序。 这是正常的行为? Windows在绘画事件中捕获exception/错误是否正常? 有没有办法来禁用这个? (如果没有的话,这意味着我们必须总是在debugging器中运行,并在testing代码时启用所有的exception)。 编辑: 在XP上正确的崩溃(访问冲突后的想要的行为) 在Vista和Windows 7上,应用程序继续运行

WCF Windows服务超时

我有一个客户端应用程序开发.net seding一个请求wcf服务,应该发送响应。如果执行时间在1分钟,没有错误,如果超过1分钟的错误是 内部exception:发送到net.tcp:// localhost:18001 / PitToPort / 2008/01/30 / StockpileService / tcp的请求操作未在configuration的超时(00:01:00)内收到回复。 分配给此操作的时间可能是更长时间的一部分。 这可能是因为该服务仍在处理该操作或由于该服务无法发送回复消息。 请考虑增加操作超时(通过将通道/代理强制转换为IContextChannel并设置OperationTimeout属性),并确保服务能够连接到客户端 如何增加超时和如何? 什么是最好的解决scheme?

C#事件日志不可访问的日志

下面是运行下面的代码时遇到的exception: 源未find,但部分或全部事件日志无法search。 无法访问的日志:安全。 代码是 if (!EventLog.SourceExists(this.EventLogSource)) exception的内容对我来说是有意义的,这就是为什么不这样做。 此行作为控制台应用程序(暂时)在Visual Studio 2010,.NET 4中运行。 我已经在不同的环境中运行,但我不希望我远程桌面打破这种方法。 我已经尝试更改HKML\CCS\Services\eventlog权限 – 无效,以及C:\Windows\System32\Winevt\Logs\Security.evtx权限。 再次,无济于事。 我的问题如下: 为什么没有覆盖忽略安全日志, 我怎样才能解决这个问题(编程) 这是因为我是远程办公桌。 任何build议将是伟大的。