在 C 或 C 代码中以编程方式为 Linux 上的 gdb 设置断点

新手上路,请多包涵

如何以编程方式在 C 或 C++ 代码中设置适用于 Linux 上的 gdb 的断点?

IE:

 int main(int argc, char** argv)
{
    /* set breakpoint here! */
    int a = 3;
    a++;  /*  In gdb> print a;  expect result to be 3 */
    return 0;
}

原文由 J. Polfer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 672
2 个回答

一种方法是发出中断信号:

 #include <csignal>

// Generate an interrupt
std::raise(SIGINT);

在 C 中:

 #include <signal.h>
raise(SIGINT);

更新Microsoft Docs 表示 Windows 并不真正支持 SIGINT ,因此如果担心可移植性,您最好使用 SIGABRT

任何 Win32 应用程序都不支持 SIGINT。当发生 CTRL+C 中断时,Win32 操作系统会生成一个新线程来专门处理该中断。这可能导致单线程应用程序(例如 UNIX 中的应用程序)变为多线程并导致意外行为。

原文由 Håvard S 发布,翻译遵循 CC BY-SA 4.0 许可协议

看到这么多没有使用软件断点专用信号的答案令人失望, SIGTRAP

 #include <signal.h>

raise(SIGTRAP); // At the location of the BP.

在 MSVC/MinGW 上,您应该使用 DebugBreak__debugbreak 内在属性。一个简单的 #ifdef 可以处理这两种情况(POSIX 和 Win32)。

原文由 Benjamin Crawford Ctrl-Alt-Tut 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题