我有一個C#WPF應用程序,並試圖找出一種方法來使用轉儲文件來確定使用Visual Studio 2010的崩潰位置。我正在使用SysWow64 \ TaskMgr.exe獲得徘徊在500MB左右的崩潰轉儲。查找基於崩潰轉儲的崩潰位置
這是我的啓動代碼,它使用Visual Basic解決方法來確保我只有一個實例正在運行。
using System;
using Microsoft.VisualBasic.ApplicationServices;
namespace UselessCrashDump
{
public class Startup
{
[STAThread]
public static void Main(string[] args)
{
SingleInstanceManager singleInstanceManager = new SingleInstanceManager();
singleInstanceManager.Run(args);
}
}
// Using VB bits to detect single instances and process accordingly:
// * OnStartup is fired when the first instance loads
// * OnStartupNextInstance is fired when the application is re-run again
public class SingleInstanceManager : WindowsFormsApplicationBase
{
App _app;
public SingleInstanceManager()
{
this.IsSingleInstance = true;
}
protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
{
//first launch
_app = new App();
_app.InitializeComponent();
_app.Run();
return false;
}
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
//subsequent launches
base.OnStartupNextInstance(eventArgs);
_app.Activate();
}
}
}
現在在我的應用程序中,我添加了一段代碼,在按下按鈕後,它會故意使其崩潰。代碼如下所示:
private void _crash_Click(object sender, RoutedEventArgs e)
{
CrashMe(null);
}
private void CrashMe(string someString)
{
someString.Split(' ');
}
果然,在我運行該exe後,單擊按鈕程序崩潰。然後我得到崩潰轉儲,打開它,這是我看到:
我期待的代碼在崩潰的特定位置中斷。但相反,故障轉儲指向程序的入口點。這發生在所有崩潰。我希望看到崩潰的確切位置,它在調試會話期間發生的方式。
我在做什麼錯?轉儲文件本身似乎被加載PDB文件,由輸出至少判斷:
'[MyApp].DMP' (Managed): Loaded 'C:\Program Files (x86)\[MyCompany]\[MyApp].exe', Symbols loaded.
它似乎並沒有被加載本地符號,但是我想因爲它是一個管理應用程序,我不知道需要它們:
'[MyApp].DMP': Loaded 'C:\Program Files (x86)\[MyCompany]\[MyApp].exe', No native symbols in symbol file.
的主要方法是.NET代碼,沒有異常處理程序。如果異常冒泡,則由操作系統處理。但即使在這種情況下,您也可以看到異常的調用堆棧。如果這不可能,那麼我們如何能夠在沒有try/catch語句的情況下進行調試? –
@ThomasW。我不認爲我說過與你不同的東西。我通過查看他的截圖回答了他的問題。如果你在他的Visual Studio上看到綠色標記,你可以看到異常發生在其他地方,但它在Main方法的末尾冒出了泡泡。另外,我沒有說沒有try/catch語句就看不到異常。 –
Main方法中沒有發生異常。這只是偶然發生的,Main方法中的代碼在執行轉儲時執行。看到我上面的截圖。根本沒有例外。 –