Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试在Visual Studio 2017中的寄存器上设置手表';s调试器:";读取寄存器值时出错“;_C++_Visual Studio_Assembly_X86 64_Visual Studio Debugging - Fatal编程技术网

C++ 尝试在Visual Studio 2017中的寄存器上设置手表';s调试器:";读取寄存器值时出错“;

C++ 尝试在Visual Studio 2017中的寄存器上设置手表';s调试器:";读取寄存器值时出错“;,c++,visual-studio,assembly,x86-64,visual-studio-debugging,C++,Visual Studio,Assembly,X86 64,Visual Studio Debugging,我目前正在通过YouTube上的一个网站工作 我现在所做的只是一些基本的工作,比如在ASSEMBLY中使用C++函数,以及使用mov指令将值移动到寄存器中 下面是C++代码: #include <iostream> using namespace std; extern "C" void SomeFunction(); int main() { SomeFunction(); // Just putting this here to stop the progr

我目前正在通过YouTube上的一个网站工作

我现在所做的只是一些基本的工作,比如在
ASSEMBLY
中使用
C++
函数,以及使用
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;
}
.code
SomeFunction proc               
    mov ax, -1          
    ret                                 
SomeFunction endp
end
问题:我正在使用Visual Studio Community 2017,每当我运行本地窗口调试器并尝试将手表添加到寄存器
ax
,但我总是收到错误消息
“错误读取寄存器值”

我哪里做错了

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


更新:因此,我尝试使用
rbx
寄存器,并能够在其中添加一块手表。但现在的问题是,它告诉我它不包含值(值部分只显示0),尽管我使用
mov
在寄存器中移动值
-1


不知道这些信息是否有用。

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

然后,在调试过程中,我转到顶部菜单并选择:

Debug>>Windows>>寄存器

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

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

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


因此,如果我在
mov ax-1
上设置一个断点,那么之前的所有指令都将被执行。

从未想过将手表添加到寄存器,但是有调试>>窗口>>寄存器,您可以在其中查看所有的寄存器。@BoPersson寄存器窗口似乎总是以十六进制显示值,而监视窗口允许选择格式,这不是很方便。如果您试图在没有任何程序集的正常代码上设置
ax
监视,是否会出现此问题?调试器过去有带有寄存器名的伪变量,但这在不久前变得很脆弱。使用调试>窗口>寄存器查看寄存器值。在指令上设置断点时,它会在该指令运行之前停止。您必须执行一次单步操作才能运行停止的指令。这使您可以查看之前和之后的状态。它还允许您调试第一条指令崩溃的函数。将断点视为进入调试器而不是运行指令。F11运行步骤中的每条指令。。。无需在每一行上设置断点(尽管有时设置大量断点可能有助于检查具有多个分支的函数中采用的执行路径)。通常,在第一行设置断点,然后使用F10或F11前进。