Tag: 调试

我如何获得崩溃转储

我需要从程序中获取崩溃转储。 我怎么得到它? 该程序是用C#编写的。 什么是崩溃转储? 什么时候创建? 它在哪里保存? 我怎么看?

用户活动记录,遥测(以及全局exception处理程序中的变量)

背景: 我正在处理一个非常古老的应用程序,很少和非常间歇地生成exception。 现行做法: 通常,我们程序员使用Global Exception处理程序处理罕见的未知数,并将这样的事情连接起来: [STAThread] [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)] private static void Main() { Application.ThreadException += new ThreadExceptionEventHandler(UIThreadException); Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledException); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new OldAppWithLotsOfWierdExceptionsThatUsersAlwaysIgnore()); } private static void UIThreadException(object sender, ThreadExceptionEventArgs t) { //——————————- ReportToDevelopers(“All the steps & variables you need to repro the problem are: ” + ShowMeStepsToReproduceAndDiagnoseProblem(t)); //——————————- MessageToUser.Show(“It’s […]

程序和调试器退出而没有指示问题

好吧,不是Heisenbug,但性质相似。 我正在开发一个WPF应用程序。 调试时,逻辑到达某个点,然后应用程序无缘无故退出。 VS调试器没有捕获任何内容,输出窗口中的以下是问题的唯一指示: 程序'[6228] SomeApp.vshost.exe:Managed(v4.0.30319)’已退出,代码为1073741855(0x4000001f)。 在调试发行版本时,或者确实从调试器运行调试版本时(实际上所有组合都没有在调试器中运行调试版本),一切正常。 我试图用以下代码捕获未处理的exception: AppDomain .CurrentDomain .UnhandledException += (sender, e) => { Debug.WriteLine(“Unhandled Exception ” + e.ExceptionObject); }; Application .Current .DispatcherUnhandledException += (sender1, e1) => { Debug.WriteLine(“DispatcherUnhandledException ” + e1.Exception); }; ……但是我没有抓到任何东西。 我正在考虑使用调试输出语句来修改应用程序,但它是高度异步的,因此阅读这将是艰巨而乏味的。 所以告诉我,如果你能……我怎么开始计算WTF正在进行?

什么是“Async Pinned Handle”?

我正在尝试调查一个非常讨厌的软件崩溃,这可能与托管堆损坏有关(因为它发生在垃圾收集期间)。 使用WinDbg和(SOS)!gshandles命令我得到类似的东西 0:000> !gchandles GC Handle Statistics: Strong Handles: 259 Pinned Handles: 137 Async Pinned Handles: 1 Ref Count Handles: 79 Weak Long Handles: 197 Weak Short Handles: 650 Other Handles: 0 Statistics: 而我只是好奇,“普通”固定手柄和“异步固定”手柄有什么区别? 我能找到哪个句柄是“异步”的吗? 我在网上找不到任何有关它的信息,因为当这个计数器正好与崩溃相关时,应用程序似乎总是崩溃。 但话说再说它可能只是垃圾收集过程中使用的一些内部东西。

目前在C#中跟踪程序流的可能性?

几年前我使用Postsharp来跟踪执行期间的程序流 , 而无需手动将trace语句添加到方法中。 有没有其他新的方法来跟踪执行以类似的方式调试输出? (最好是一种不需要检测构建组件的方法。也许不可能?)

将C#中的调试器附加到另一个进程

我希望能够自动附加调试器,例如: System.Diagnostics.Debugger.Launch() ,除了当前进程到另一个命名进程。 我有一个进程名称和PID来识别其他进程。 这可能吗?