分类 调试 下的文章

五、源文件行语法

可以将源文件行号指定为MASM表达式的全部或部分。这些数字计算出与该源代码行对应的可执行代码的偏移量。不能使用源代码行作为C++表达式的一部分。必须用重音符(`)将源文件和行号表达式括起来。以下示例显示源文件行号的完整格式。

`[[Module!]Filename][:LineNumber]`

什么是FileNotFoundException?

尝试访问磁盘上不存在的文件失败时引发的异常。如果你的代码没有 PathDiscovery 的权限,则此异常的错误消息可能只包含文件或目录名称,而不是完全限定的路径。

继承


二、字符串通配符语法

一些调试器命令具有接受各种通配符的字符串参数。这些类型的参数支持以下语法功能:

  •  星号(*)表示零个或多个字符。
  • 问号(?)表示任何单个字符。
  • 包含字符列表的括号([])表示列表中的任何单个字符。列表中只有一个字符匹配。在这些括号中,可以使用连字符(-)指定范围。例如,prog[er-t7]am匹配“progeam”、“program”、“progsam”、“progtam”和“prog7am”。
  • 数字符号(#)表示前面零个或多个字符。例如,lo#p与“lp”、“lop”、“loop”、“loop”等匹配。您还可以将数字符号与括号组合,因此m[ia]#n与“mn”、“min”、“man”、“maan”、“main”、“mian”、“miin”、“miain”等匹配。
  • 加号(+)表示前面的一个或多个字符。例如,lo+p与lo p相同,只是lo+p与“lp”不匹配。同样,m[ia]+n与m[ia]n相同,只是m[ia]+n与“mn”不匹配。A?+B和A*B一样,除了A?+B与“AB”不匹配。
  • 如果必须指定文字数字符号(#),问号(?),左括号([),右括号(]),星号(*)或加号(+)字符,必须在字符前面添加反斜杠(\)。如果不将连字符括在括号中,则连字符始终是文字。但不能在带括号的列表中指定文字连字符。

我一直想知道更多关于这个问题的信息,但运气不太好。我一直在读,应用程序不应该出现这个错误,它不告诉我什么可以导致这个错误出现。我知道这个问题非常宽泛,因为我确信这个错误可能有多种原因,所以我会尽量缩小范围。我在VS2015中开发了一个使用C++ .NET的应用程序。应用程序主要使用非托管代码,很少使用托管代码(由于垃圾收集器的严重干扰)。所以我认为95%是非托管的,5%是托管的。我在某个地方读到过,不稳定/错误/不正确的非托管代码可能会扰乱CLR内存的某些部分,使其损坏并引发此错误。由于95%的应用程序是非托管的,我不知道从哪里开始查找。可能是少数几个在托管和非托管之间交互的类?如何将数据从托管封送到非托管?错误的空指针会导致此失败吗?还有什么问题会导致这种情况?数组索引越界?空对象呢?
如果您能提供有关System.ExecutionEngine故障可能原因的详细列表,我们将不胜感激!可能原因/情况列表如下:

  • C++与C语言的参数失配
  • 使用反射时
  • WCF服务试图在此处返回IList或IEnumerable
  • 使用分析工具
  • 在汇编程序中使用std指令
  • 多次调用::FreeLibrary()
  • .NET剪贴板调用
  • 使用统一框架
  • 使用错误的封送处理
  • 使用INotifyPropertyChanged

本文介绍使用调试器命令必须遵循的语法规则。使用Windbg调试时,应遵守以下一般语法规则:

  • 您可以在命令和参数中使用大小写字母的任意组合,除非在本节的主题中特别指出。
  • 可以用一个或多个空格或逗号(,)分隔多个命令参数。
  • 通常可以省略命令与其第一个参数之间的空格。如果这种省略不会造成任何歧义,则可以经常省略其他空格。

阅读本文中的命令引用注意以下事项:

  • 粗体字体的字符表示必须逐字键入的项目。
  • 斜体字体的字符表示参考主题“参数”部分中解释的参数。
  • 括号([xxx])中的参数是可选的。带有竖线([XXX|YYY])的括号表示可以使用一个或无一个封闭参数。
  • 带竖线(XXX|YYY)的大括号表示必须仅使用其中一个封闭参数。