Articles of 未处理exception

Windows任务调度程序不报告错误?

我们有一个“服务”,实际上是一个定期作为Windows Scheduled Task运行的C#控制台应用程序。 有意的话,我们会让例外(如果有的话)冒泡到程序的主程序执行中,这样Windows任务计划程序就可以检测到这个事件,并为负责监视服务器的人员提供详细的信息。 应用程序本身并不复杂,事实上,在遇到错误时停止执行所有的执行是有意义的。 然而,由于服务运行的副作用,我们刚刚发现了一个错误,并试图排除故障,这些服务器的负责人告诉我,他们得到的唯一信息是它的开始和结束时间,没有关于它如何运行的额外信息。 它是否正确? 或者我应该做其他事情,而不是只是冒泡例外,以便WTS可以获得任务结果的详细信息?

Windows错误:exception:访问冲突读取0x00000160

我对Python非常陌生,正在运行一个程序来发送和接收带有Nexys3板的以太网包。 我在init方法中打开指向以太网设备的指针,将其存储在全局variables中,然后在发送和接收方法中访问它。 在这两种方法中,我得到的错误: WindowsError:exception:读取违规读取0x00000160 我做了大量的研究,发现这个Windows错误意味着重启操作失败,但我不知道这意味着什么或如何去解决它。 我无法发布我的代码,所以我不寻找一个快速和简单的修复。 我只是想知道是否有人曾经遇到过这个错误,它可能意味着什么或指示我的代码。 预先感谢您的帮助!

Visual Studio中的STATUS_SINGLE_STEP

我想在我的代码中添加一个VEH handler ,并且在第一个STATUS_ACCESS_VIOLATION中 ,通过设置exc->ContextRecord->EFlags |= 0x100来将跟踪位设置为1,以单步违规。 我看到该处理程序正在调用ACCESS_VIOLATION,但在跨越有问题的代码之后,绝不会使用exc->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP调用。 我怀疑debugging器在运行处理程序时从the EFlags删除了0x100。 如果我在命令提示符下运行,我发现它正在被击中。 有反正我可以让debugging器不改变跟踪标志,并允许我的处理程序调用ExceptionCode = STATUS_SINGLE_STEP ? 谢谢

如果在焦点丢失或崩溃的情况下如何禁用辅助键(粘滞键,切换键等)?

我试图通过以下http://msdn.microsoft.com/en-us/library/windows/desktop/ee416808(v=vs.85).aspx#disable_the_accessibility_shortcut_keys为我的游戏(通过DLL)禁用辅助function键除了在游戏失去焦点时或在发生崩溃的情况下也会永久禁用键。 所以我需要应用程序来恢复失去焦点时,当它崩溃的关键。 export double accesskeys_disable(double aDisabled) { if (aDisabled == 1) { // Save the initial state SystemParametersInfo(SPI_GETSTICKYKEYS, sizeof(STICKYKEYS), &g_StartupStickyKeys, 0); SystemParametersInfo(SPI_GETTOGGLEKEYS, sizeof(TOGGLEKEYS), &g_StartupToggleKeys, 0); SystemParametersInfo(SPI_GETFILTERKEYS, sizeof(FILTERKEYS), &g_StartupFilterKeys, 0); STICKYKEYS skOff = g_StartupStickyKeys; if( (skOff.dwFlags & SKF_STICKYKEYSON) == 0 ) { // Disable the hotkey and the confirmation skOff.dwFlags &= ~SKF_HOTKEYACTIVE; skOff.dwFlags &= ~SKF_CONFIRMHOTKEY; SystemParametersInfo(SPI_SETSTICKYKEYS, […]

Storeasync()在Windows 8中给予例外,但在Windows Phone 8中正常工作

StreamSocket socket = null; DataWriter datawriter = null; DataReader dataReader = null; socket = new StreamSocket(); datawriter = new DataWriter(socket.OutputStream); dataReader = new DataReader(socket.InputStream); public async Task<byte[]> sendreceive(byte[] bytes) { try { datawriter.WriteBytes(bytes); await datawriter.StoreAsync(); //Exception here } catch (Exception ex) { throw ex; } } //connect the socket socket = new StreamSocket(); await socket.ConnectAsync( […]

DLL中的C ++exception(MinGW)

我正在用C ++ MinGw 4.8制作一个Windows DLL。 该库在内部使用C ++类和exception,但它的接口是C-only,即。 图书馆之外没有任何exception。 不幸的是,当我用-static选项编译库时,C ++exception不会被捕获。 即使这个简单的例子失败,exception不会被捕获,应用程序被中止: try { throw std::logic_error("Hello World"); } catch (…) { std::cout << "Exception caught" << std::endl; } 当我编译库没有 – -static命令行开关,它工作正常。 有趣的是,我的库的旧版本甚至用静态链接工作,现在我很困惑,为什么它停止工作… 我从一个简单的testingC ++应用程序调用由相同的编译器编译的库,但我需要使库兼容其他编译器/语言。 请有人build议如何解决这个问题? 编辑:我试图通过-static-libstdc++ -static-libgcc选项replace-static选项。 现在当我删除-static-libgcc ,exception处理工作正常。 所以我的问题是关于libgcc静态链接,但我仍然不知道为什么这很重要。 有任何想法吗? 编辑2:当我debugging我的DLL时,它调用embedded在DLL中的_Unwind_RaiseException函数。 它看起来像某种ABI不兼容…在这里,人们处理类似的问题: C ++exception和.eh_frame ELF部分 Klasyc

用WinDbgdebugging0xc000001dexception

我试图find与WinDbg“非法指令”exception(0xc000001d)的根本原因。 该项目是用VC ++ 2015构build的。 我有两个testing运行的内存转储。 现在我发现以下两个转储都是正确的: exception指向“ movq mmword ptr [ecx], xmm0 ”指令 xmm0包含零 exception发生在对象构造函数中 地址在DS内 该地址属于看起来有效的堆入口 地址指向的对象正在构build,所以它似乎试图把零也看起来有效的obj.m_data成员 我不知道该往哪里走,所以我会很感激任何方向。 UPD: … movq xmm0,mmword ptr [esi] lea ecx,[edi+94h] movq mmword ptr [ecx],xmm0 ; << this causes the exception

在Windows上的堆栈展开过程中发生故障时会发生什么?

在Windows上的SEH 堆栈展开期间发生故障时会发生什么? 例如,如果展开信息被破坏或不正确,或者堆栈被无效数据覆盖,并且在展开过程中发生GP故障? 诊断对话框仍然呈现给用户,还是在这种情况下有不同的行为?

即使没有其他必要,合法的epilog是否需要包含一个虚拟的rsp调整?

x86-64 Windows ABI具有合法epilog的概念,这是一种特殊types的函数epilog,可以在exception处理过程中模拟 ,以恢复调用者上下文1,如下所述: 如果RIP在发生exception的情况下处于结尾,则控制权将离开函数,并且必须继续结尾的效果以计算调用者函数的上下文。 为了确定RIP是否在epilog内,检查来自RIP on的代码stream。 如果该码stream可以与合法结尾的尾部相匹配,那么它就处于结尾,并且结尾的剩余部分被模拟,随着每条指令被处理,更新上下文logging。 你可以在这里find一个合法epilog的散文描述,其中包括下面的例子: 如果函数中没有使用帧指针,那么epilog必须首先释放堆栈的固定部分,非易失性寄存器被popup,并且控制返回到调用函数。 例如, add RSP, fixed-allocation-size pop R13 pop R14 pop R15 ret 它包含一个类似的例子,当使用帧指针时,它可以恢复堆栈。 但是,如果这个function没有固定的大小分配呢? 函数不使用堆栈的情况并不less见。 在这种情况下是否需要插入一个虚拟的add rsp, 0以符合合法epilog的规则,或者可以省略? 1例如,恢复可能被被调用者破坏的非易失性寄存器。

设置DLL使用超时

我在C#中编写一个DLL,我需要,(不想),在特定的时间内限制DLL的使用。 我希望它在使用开始后的N小时后停止工作,同时通知用户。 如果该DLL在M小时内不被使用,也停止使用(作为一种保持活动)。 用法正在调用DLL的函数之一。 使用exception总是与DLL的可用性相冲突(我无法阻止它)。 我非常感谢任何帮助,我可以得到,我不是很有经验的使用C#。 任何语言的任何解决scheme将是伟大的,显然我在Windows电脑上运行,但其组件(服务包等)可以很容易地修改,如果需要任何修改。 非常感谢您的帮助,谢谢。 编辑 我想我不清楚。 我需要的是通知用户在DLL中使用函数的结束,所以如果他愿意,他可以再次初始化这些函数。 该DLL不卸载。 而且我不想干涉主程序进程,即使用DLL函数的进程。