在C / C ++中捕获DLL崩溃

时间:2011-02-08 23:48:43

标签: c++ c dll crash

我正在从DLL调用函数,如下所示:

__declspec ( dllimport ) bool dll_function(...);

int main() {
  [...]
  if (dll_function(...)) {
    [...]
  }
}

在某些情况下,我传递给DLL函数的数据将导致DLL崩溃。有可能捕获这个,所以我的应用程序也不会崩溃(不修改不是由我创建的DLL)?

4 个答案:

答案 0 :(得分:4)

您可以使用MSVC编译器中的__try和__except关键字捕获AV。并非所有这些都有用,你不知道造成了什么样的伤害。您的程序状态可能已损坏。例如,堆可能会被烧毁,从而导致随后的随机故障。在自己的进程中托管DLL并使用IPC与它进行通信是唯一不错的方法。

答案 1 :(得分:2)

  

在某些情况下,我传递给的数据   DLL函数会导致崩溃   DLL。是否有可能抓住这一点   所以我的应用程序不会崩溃   好?

如果只调用具有有效数据的函数,是否可以防止dll崩溃?在任何情况下,这应该是最好的解决方案 - 但在不知道你想要使用哪个DLL的情况下很难分辨。但在大多数情况下,您应该知道“数据”究竟会导致崩溃......

答案 2 :(得分:1)

试着看看:

http://msdn.microsoft.com/en-us/library/ms680634%28v=vs.85%29.aspx

Oleg Starodumov(www.debuginfo.com)强制执行过滤器代码

http://www.debuginfo.com/articles/debugfilters.html

但是,这是一个顶级过滤器而不是try / catch。您也许可以重新启动您的流程。

您可能需要使用__try进行例外处理。再次,可能更好地解决问题或只是崩溃而不是试图抓住它。 我同意其他人的意见,而不是压制或隐藏崩溃,你应该修复它。我不知道你能从崩溃中恢复得多好 - 在这样的事情之后继续执行会有用吗?

答案 3 :(得分:0)

我不确定这是否是问题,请尝试指定正确的调用约定。 (__stdcall__cdecl等)。

如果这不是问题,我们需要查看您传递给函数的内容以及可能的函数代码(如果有的话)。