Visual Studio输出窗口中的消息源

时间:2018-08-27 09:00:21

标签: c# c++ visual-studio debugging visual-studio-2017

假设我的输出窗口中有一条消息(显示 Debug 的输出)

  

抛出异常:mscorlib.dll中的'System.InvalidOperationException'

我的应用程序不会引发异常,仅显示该消息并继续。当我在作为C ++模块的导入的DLL(我的应用程序为C#)中调用方法时,会发生异常。尽管出现此消息,该方法仍然似乎可以正常工作。

我的猜测是该模块正在处理异常,然后显示该消息,但是我想确定确实是这种情况,并且与导入或整理数据(或自定义整理程序)无关)。

(我的代码:

[DllImport("theExternalModule.dll", EntryPoint = "ReadData", SetLastError = true)]
[return: MarshalAs(UnmanagedType.U4)]
private static extern UInt32 ReadData([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(JaggedArrayMarshaler))] Int16[][] data,
                                      [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(JaggedArrayMarshaler))] Int16[][] dataOrig,
                                      [MarshalAs(UnmanagedType.U2)] Int16 buffsize,
                                      ref int smpNum);

resultCode = ReadData(_buffer, _origBuffer, bufferSize, ref sampleNumber);

(当我在调试器中浏览此行时,将显示消息)

我的问题是,有没有办法让输出窗口告诉我是什么模块或方法导致了该消息的显示?

1 个答案:

答案 0 :(得分:0)

在创建枚举器后更改集合时,通常会发生此问题。您最初的问题没有足够的代码来断言这一点,但是您可以阅读有关herehere的问题。

这是一个引发异常的示例(摘自一篇文章):

List<Book> books = new List<Book>();
books.Add(new Book("The Stand", "Stephen King"));
books.Add(new Book("Moby Dick", "Herman Melville"));
books.Add(new Book("Fahrenheit 451", "Ray Bradbury"));
books.Add(new Book("A Game of Thrones", "George R.R. Martin"));
books.Add(new Book("The Name of the Wind", "Patrick Rothfuss"));

Book newBook = new Book("Robinson Crusoe", "Daniel Defoe");
foreach (var book in books)
{
  if (!books.Contains(newBook))
  {
    books.Add(newBook);  // Throws a InvalidOperationException in mscorlib.dll
  }
}

您可能还希望查看the InvalidOperation class on MSDN的更多原因。