标签: clrdump

SetUnhandledExceptionFilter如何在.NET WinForms应用程序中工作?

我正在开发一个项目来增强我们的生产调试功能.我们的目标是在任何未处理的异常上可靠地生成minidump,无论异常是托管还是非托管,以及它是在托管或非托管线程上发生的.

我们目前使用优秀的ClrDump库,但它并没有完全提供我们需要的确切功能,我想了解异常过滤背后的机制,所以我开始尝试自己.

我开始关注这篇博客文章,自己安装一个SEH处理程序:http: //blogs.microsoft.co.il/blogs/sasha/archive/2007/12.aspx.这种技术适用于控制台应用程序,但是当我从WinForms应用程序尝试相同的事情时,我的过滤器不会被调用任何种类的非托管异常.

ClrDump可以做什么,我不做什么?ClrDump在所有情况下都会生成转储,因此必须仍然调用其异常过滤器...

注意:我知道ADPlus的功能,我们也考虑过使用AeDebug注册表键......这些也是可能性,但也需要权衡.

谢谢,戴夫

// Code adapted from <http://blogs.microsoft.co.il/blogs/sasha/archive/2007/12.aspx>
LONG WINAPI MyExceptionFilter(__in struct _EXCEPTION_POINTERS *ExceptionInfo)
{
   printf("Native exception filter: %X\n",ExceptionInfo->ExceptionRecord->ExceptionCode);

   Beep(1000,1000);
   Sleep(500);
   Beep(1000,1000);

   if(oldFilter_ == NULL)
   {
      return EXCEPTION_CONTINUE_SEARCH;
   }

   LONG ret = oldFilter_(ExceptionInfo);
   printf("Other handler returned %d\n",ret);

   return ret;
}



#pragma managed

namespace SEHInstaller
{
   public ref class SEHInstall
   {
   public:
      static void InstallHandler()
      {    
         oldFilter_ = SetUnhandledExceptionFilter(MyExceptionFilter);
         printf("Installed handler old=%x\n",oldFilter_);
      }


   };
}
Run Code Online (Sandbox Code Playgroud)

.net c# debugging clrdump

10
推荐指数
1
解决办法
7872
查看次数

Clrdump(C++)错误LNK2019:函数_main中引用的未解析的外部符号__imp__RegisterFilter @ 8

我正在使用makefile系统与pvcs编译器(使用Microsoft Visual C++,2008编译器),我收到的形式有几个链接错误:

error LNK2019: unresolved external symbol __imp__RegisterFilter@8 referenced in function _main

这是发生在DESPITE使用extern "C"声明,即:

extern "C" int CLRDUMP_API RegisterFilter( LPCWSTR pDumpFileName, unsigned long DumpType );
Run Code Online (Sandbox Code Playgroud)

此外,在makeexe.mak中,库被链接为:

$(COMPILEBASE)\ lib\clrdump.lib \

说实话,我不是makefile的专家,而且我正在将系统从Microsoft Visual C++ 6.0转换到2008.这种转换可能与链接错误有关,就像以前系统工作一样.

真的很感激任何帮助.

提前致谢,

真诚的,约瑟夫

- 编辑1 -

有谁知道如何在pvcs的makefile系统中打开详细信息?

请注意,上面的函数已经是编译器装饰的版本了

__imp__RegisterFilter@8
Run Code Online (Sandbox Code Playgroud)

而C++的功能就是

RegisterFilter
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,但如果有人可以发布更完整的解决方案,那也将非常感激.

真诚的,约瑟夫

- 编辑2 -

有些人发布了这个,但当我登录时它消失了:

imp前缀表示此函数是从DLL导入的.检查 - 的定义CLRDUMP_API- 是__declspec(dllimport)吗?有关更多信息,请参阅此文章.

有一个工作链接,但我已经失去了,但我想人们总是可以搜索主题.

谢谢,无论你是谁!

- 编辑3 -

谢谢ChrisN(我还没有被允许投票).尽管使用了刷新按钮,但你的答案消失了,但是在我发布了一个cut-n-paste之后又重新出现了.

这是我对此的定义:

define CLRDUMP_API __declspec(dllimport) __stdcall
Run Code Online (Sandbox Code Playgroud)

我假设__stdcall没问题?

- 编辑4 -

虽然我很感谢那些回答的人的努力,特别是ChrisN,至少在我的特定系统上,链接错误仍然存​​在.所以如果有人有任何进一步的见解,我会很感激.再次感谢.

c++ makefile clrdump visual-studio

5
推荐指数
3
解决办法
4万
查看次数

标签 统计

clrdump ×2

.net ×1

c# ×1

c++ ×1

debugging ×1

makefile ×1

visual-studio ×1