我在尝试更改我的进程的正常路径时尝试访问内存时遇到了一个令人惊讶的问题。
我无法在较小的代码中重现该问题,但这里是上下文: - 拥有众多线程 - 有一个if语句 - 在if“then”块中声明和初始化非本机类型的变量(例如:System.DateTime) 然后在调试中: - 不满足if条件,将调试光标从if之后的语句移动到“then”块的第一个语句。 - 初始化内部变量时,程序崩溃(nullrefexception)。
如果变量在if之外声明或者进程正常进入“then”时钟,则不会发生这种情况。
我的观点是,即使变量的内存被分配在if之外(在函数的范围内),线程也无权访问内存,直到进程进入if作用域。 这意味着本机编译器在有效变量声明中授予线程所有权。
此外,调试器的监视器在访问此内存时没有任何问题,也没有例外。
我没有这方面的证据,并且想知道任何确保的方法(比如看到线程内存所有权)。 如果这是真的,那么在这种情况下,对于没有正确绑定IL和.Net的vs调试器来说,这不是一个问题吗?