gpt4 book ai didi

c++ - __debugbreak 的可移植等价物

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:56 25 4
gpt4 key购买 nike

我已经在 Windows 上使用 __debugbreak() 编写了一些代码,我想支持其他编译器,所以我希望创建此函数的更便携版本(Clang 和海合会)。

我暂时拒绝使用内联汇编程序,因为它不提供指定调试中断的独立于目标的方法。我还查看了 __builtin_trap() 但显然它实际上不允许例如在之后介入/步过之类的事情。我也看过 this question但接受的答案实际上并没有指定我正在寻找的位 - “...”中的位。

我也看到了一些关于支持这个的 Clang 补丁,但显然 Clang 仍然拒绝包含 __debugbreak() 的代码。

有什么建议吗?

最佳答案

我可以确认 __builtin_trap() 没有为您提供正确类型的断点以在 gcc 中继续。它给出了一个非法操作码陷阱,它根本不允许代码继续 - 如果您在 gdb 中执行 next,它只会以 SIGILL< 退出,如果您真的希望能够继续,这并不是特别有用。

据我所知,唯一的解决方案是使用内联汇编程序。我尝试在“hello, world”程序中使用 int 3,尽管 gdb 无法识别断点,但它确实在指令处停止了,我能够休息后继续。

#include <stdio.h>

#define BREAKPOINT \
asm("int $3")

int main()
{

BREAKPOINT;

printf("Hello, world!\n");
return 0;
}

(在 Linux x86_64 上用 gcc 和 clang 编译,32 位和 64 位模式)

我确实找到了这个博客: http://mainisusuallyafunction.blogspot.co.uk/2012/01/embedding-gdb-breakpoints-in-c-source.html

但它需要一个脚本来解析可执行文件(并且可能根本无法在 Windows 下运行)。

关于c++ - __debugbreak 的可移植等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17516855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com