在 VC 中查看精确反汇编的最佳方式是什么? 2010 处于 Win32 发布模式时?

发布于 2024-10-18 07:27:46 字数 141 浏览 7 评论 0原文

我正在编写汇编级优化代码,我需要确保 C++ 编译器在发布模式下正确使用它。

我曾经能够让发布模式程序在 VS 2002 中的断点处中断(并在逐步执行时显示原始反汇编代码),但我不记得如何让它工作。 VS 2010 是否有任何选项可能允许这种情况发生?

I am writing assembly-level optimized code, and I need to make sure that the C++ compiler is working with it correctly in Release-Mode.

I used to be able to get Release-Mode programs to break on breakpoints in VS 2002 (and display the raw disassembly as I stepped through it), but I can't remember how I got that to work. Does VS 2010 have any options that might allow this to happen?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

甜味超标? 2024-10-25 07:27:46

如果您想使用调试器查看反汇编代码,您可以在要查看的代码之前放置一个 __debugbreak() 内部调用。

If you want to use the debugger to view the disassembly, you can place a __debugbreak() intrinsic call right before the code which you want to view.

森林很绿却致人迷途 2024-10-25 07:27:46

使用 /Zi 编译并使用 /DEBUG 链接,您将能够设置断点。

在项目的“属性”对话框下:

  • /Zi 可以在 C++ 中启用 -->一般-->调试信息格式

  • 可以在链接器中启用

    /DEBUG -->调试-->生成调试信息

Compile with /Zi and link with /DEBUG and you'll be able to set breakpoints.

Under a project's Properties dialog:

  • /Zi can be enabled in C++ --> General --> Debug Information Format

  • /DEBUG can be enabled in Linker --> Debugging --> Generate Debug Info

删除→记忆 2024-10-25 07:27:46

如果您正在编写直接汇编,则可以仅使用INT 3。当您使用调试器放置断点时,它实际上会将代码更改为该断点(二进制为 0xCC),因此调试器在执行时将被调用。

您还可以像 zr 建议的那样调用为您执行此操作的函数之一。 Windows 版本是 DbgBreakPoint()。如果你拆开它,你可以很容易地看到它只不过是INT 3

If you're writing straight assembly, you can just use INT 3. When you place a breakpoint using the debugger, it actually changes the code to that (0xCC in binary) so the debugger will get called when it's executed.

You can also call one of the functions that do that for you like zr suggested. The Windows one is DbgBreakPoint(). If you disassemble it, you could easily see it's nothing but INT 3.

旧城烟雨 2024-10-25 07:27:46

这些曾经是导致断点的方法:

_asm
{
  int 3
}

或者

_asm
{
  _emit 0xcc
}

_emit 0xcc

我不确定语法(已经有一段时间了),但希望可以用它来做点什么。

These used to be methods of causing breakponts:

_asm
{
  int 3
}

or

_asm
{
  _emit 0xcc
}

or was it

_emit 0xcc

I'm not sure of the syntax (it's been a while) but hopefully something can be made of it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文