试图在Visual Studio 2017的调试器中的寄存器上设置监视:“读取寄存器值时出错”

Und*_*der 5 c++ assembly x86-64 visual-studio visual-studio-debugging

我目前正在 YouTube上查看x64汇编教程

我现在所做的只是一些基本的事情,例如使用C++函数ASSEMBLY和使用mov指令将值移入寄存器。

这是C++代码:

#include <iostream>
using namespace std;

extern "C" void SomeFunction();

int main() {
    SomeFunction();

    // Just putting this here to stop the program from closing immediately after opening
    cin.get();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是ASSEMBLY代码:

.code
SomeFunction proc               
    mov ax, -1          
    ret                                 
SomeFunction endp
end
Run Code Online (Sandbox Code Playgroud)

问题:每当我运行Local Window Debugger并尝试将Watch添加到寄存器时ax,我都在使用Visual Studio Community 2017 ,但我一直收到错误消息'Error reading register value'

我要去哪里错了?

抱歉,如果不清楚,请让我知道,我可以尝试更好地解释。


更新:因此,我尝试使用rbx寄存器代替,并且能够为其添加手表。但是现在的问题是,尽管我mov以前-1在寄存器中移动了值,但它告诉我它不包含任何值(“值”部分仅显示0)。

不知道此信息是否有帮助。

Und*_*der 0

已解决:为了解决这个问题,我首先在每条指令上添加了一个断点。这使我们能够“逐步”运行该程序。

然后在调试期间我转到顶部菜单并选择:

Debug >> Windows >> Registers

这将使您能够看到所有寄存器。

然后我保存了两者ASSEMBLYC++文件,然后运行它(您可以使用 F5 作为运行的快捷方式)。

注意:程序将执行断点之前的所有指令。

因此,如果我在 处设置断点mov ax -1,则 BEFORE ONLY 之前的所有指令都将被执行。

  • **F11** 单步运行每条指令...无需在每一行上设置断点(尽管设置大量断点有时可能有助于检查具有许多分支的函数中采用的执行路径)。通常,您在第一行设置断点,然后使用 **F10** 或 **F11** 前进。 (2认同)