【发布时间】:2020-11-21 02:55:39
【问题描述】:
我有一个简单的 C++ 程序,它调用了一些 NASM 代码:
main.cpp:
#include <iostream>
extern "C" int foo();
int main() {
std::cout << "The result is: " << foo() << std::endl;
return 0;
}
foo.asm:
bits 64
global foo
section .text
foo:
mov rax, 123
inc rax
ret
我可以用 CMake 编译所有东西
cmake_minimum_required (VERSION 3.15)
project (assembly-x64 LANGUAGES CXX ASM_NASM)
# old school CMAKE to handle NASM formats
if(WIN32)
set(CMAKE_ASM_NASM_FLAGS_DEBUG "-g -F cv8")
set(CMAKE_ASM_NASM_OBJECT_FORMAT win64)
elseif(APPLE)
set(CMAKE_ASM_NASM_FLAGS_DEBUG "-g -F dwarf")
set(CMAKE_ASM_NASM_OBJECT_FORMAT macho64)
else()
set(CMAKE_ASM_NASM_FLAGS_DEBUG "-g -F dwarf")
set(CMAKE_ASM_NASM_OBJECT_FORMAT elf64)
endif()
add_executable(assembly-x64)
target_compile_features(assembly-x64 PUBLIC cxx_std_17)
target_sources(assembly-x64 PRIVATE main.cpp foo.asm)
我得到了正确的结果。但是,我希望能够像调试 C++ 代码一样调试汇编代码。我可以在 foo 函数上创建一个断点(虽然不使用 GUI),但它在暂停时不会显示相应的源位置。有没有办法解决这个问题?我希望能够观看寄存器等。不确定在 VS 代码中是否可行。
【问题讨论】:
标签: c++ debugging assembly visual-studio-code nasm