首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__debugbreak的可移植等价物

__debugbreak的可移植等价物
EN

Stack Overflow用户
提问于 2013-07-08 06:04:50
回答 1查看 2.7K关注 0票数 2

我已经在Windows上用__debugbreak()写了一些代码,而且我想支持其他编译器,所以我希望创建一个这个函数的更可移植的版本(Clang和GCC)。

我现在拒绝使用内联汇编程序,因为它不提供指定调试中断的独立于目标的方法。我也看过__builtin_trap(),但显然它并不允许,例如,后退/后退之类的事情。我也看过this question,但公认的答案实际上并没有指定我正在寻找的那一位--在"...“中的那一位。

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

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2013-07-08 06:28:14

我可以确认,__builtin_trap()没有为您提供正确的断点类型,以便在gcc中继续。它提供了一个illegal opcode trap,根本不允许代码继续-如果在gdb中执行next,它只会带着一个SIGILL退出,如果您真的想继续执行,这并不是特别有好处。

据我所知,唯一的解决方案是使用内联汇编程序。我尝试在"hello,world“程序中使用int 3,虽然gdb不能识别断点,但它确实在指令处停止,并且我能够在中断后继续。

代码语言:javascript
复制
#include <stdio.h>

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

int main()
{

    BREAKPOINT;

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

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

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

但它需要一个脚本来解析可执行文件(在Windows下可能根本不起作用)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17516855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档