我想在即时窗口中运行它:
?(char*)mono-2.0-bdwgc.dll!mono_pmip((void*)0x0000017866931945)
我得到这个:
identifier "mono" is undefined
肯定会加载具有该名称的 DLL。
我尝试将 DLL 名称括在引号、括号、反引号等中 - 我收到"无法识别的令牌"或相同的错误。
从玩弄DLL名称(给出假名字!(来看,问题似乎是连字符,数字和句点的组合。从 DLL 名称中删除其中任何一个都会给出"找不到模块 X"错误,表明它至少可以识别它。
有什么方法应该输入它来使其被识别吗?或者也许这是一个Visual Studio错误?
我使用的是Visual Studio 2017版本15.7.1。DLL来自使用Unity 2018.1.0f2,Windows 64 Standable,.NET 4.6运行时构建的游戏。
上下文:此 Unity 文档 (https://docs.unity3d.com/Manual/WindowsDebugging.html( 指示用户在即时窗口中运行上述命令以从故障转储中检索托管符号 - 但该文档已过时,具有较新单声道运行时的最新版本的 Unity 实际上使用"mono-2.0-bdwgc.dll"而不是"mono.dll",所以我正在尝试但未能适应!
您可以使用替代/引用上下文语法引用:
? {,,mono-2.0-bdwgc.dll}mono_pmip((void*)0x0000017866931945)
使用上下文运算符的支撑版本。
从文档中:
有两种方法可以指定上下文:
{,,[模块] } 表达式
大括号必须包含两个逗号和模块(可执行文件或 DLL(名称或完整路径。
例如,要在 EXAMPLE 的
SomeFunction
函数处设置断点.dll:{,,EXAMPLE.dll}SomeFunction
。
模块
是模块的名称。您可以使用完整路径来消除同名模块之间的歧义。
如果模块路径包含逗号、嵌入空格或大括号,则必须在路径两边使用引号,以便上下文分析器可以正确识别字符串。单引号被视为 Windows 文件名的一部分,因此必须使用双引号。例如
{,,"a long, long, library name.dll"} g_Var
。