从MFC调试C#DLL方法

从MFC调试C#DLL方法,c#,C#,我有一个奇怪的问题。一个用户正在尝试我的应用程序,它是MFC并从中运行一个C#DLL 我的beta测试和我的许多用户一样很好。但首先,64位崩溃了 我们对MFC端的消息框进行了一些调试,似乎从MFC调用的这个方法失败了: public string[] GetPersonnelNames(bool bSort = true) { List<string> listPersonnelNames = new List<string>(); foreach (K

我有一个奇怪的问题。一个用户正在尝试我的应用程序,它是MFC并从中运行一个C#DLL

我的beta测试和我的许多用户一样很好。但首先,64位崩溃了

我们对MFC端的消息框进行了一些调试,似乎从MFC调用的这个方法失败了:

public string[] GetPersonnelNames(bool bSort = true)
{
    List<string> listPersonnelNames = new List<string>();
    foreach (KeyValuePair<string, Publisher> pkvPair in _PublisherData.PublisherDictionary)
    {
        if (pkvPair.Value.Assignments.IsPersonnel())
            listPersonnelNames.Add(pkvPair.Value.Name);
    }
    if (bSort)
        return listPersonnelNames.OrderBy(p => p).ToArray();

    return listPersonnelNames.ToArray();
}
但我看不出它怎么会失败。我是否错过了任何重要的精神检查


我不知道如何用这个从MFC方面进一步调试:(

由于什么消息而崩溃?事件日志中是否有任何内容?添加适当的日志记录并记录整个异常,包括其调用堆栈。使用
exception.ToString()可以很容易地获得此信息。)
。也许
\u PublisherData
PublisherDictionary
为空,或者字典包含空值。或者我会问他一些完全不同的问题。奇怪的是,32位版本没有崩溃-相同的代码。@PanagiotisKanavos如何“添加正确的日志记录并记录整个异常”?在所有公共函数中添加一个
try/catch
块,并使用您喜欢的任何日志记录接口,或者只向文件写入一些内容。DLL的公共方法是其接口,因此您需要确保在那里处理并记录任何问题,即使您打算将错误传播到应用程序。我注意到他的XML文件不符合dat我让他修改了它,他的错误消失了。所以,是的,很可能是某个地方有空指针。我将尝试查找添加日志的教程。我以前没有这样做过。如何将文件保持在可管理的大小?
public bool IsPersonnel()
{
    bool bIsPersonnel = true;

    if (_Assignments == AssignmentType.None ||
        _Assignments == AssignmentType.Demonstration || 
        _Assignments == AssignmentType.Student ||
        _Assignments == (AssignmentType.Demonstration | AssignmentType.Student))
    {
        bIsPersonnel = false;
    }

    return bIsPersonnel;
}