在c ++中没有断点的中断进程

Posted

技术标签:

【中文标题】在c ++中没有断点的中断进程【英文标题】:Break process without breakpoint in c++ 【发布时间】:2011-03-17 07:56:49 【问题描述】:

在 Visual Studio 2008 MFC 应用程序中,当我按下按钮时,有没有办法在没有断点的情况下停止调试?问题是,这是一个相当大的共享项目,所以我的代码被另一个“模块”调用,但我不知道我的哪些函数被调用,所以我不知道在哪里放置断点。如果我的任何函数被调用,我的目标是中断该过程。

【问题讨论】:

【参考方案1】:

您可以使用DebugBreak() 函数。

【讨论】:

【参考方案2】:

您可以编写一个 Visual Studio 宏,在源代码的每一行放置一个断点。你可以让它更聪明一点,只在每个函数开始时设置断点,但这需要一些解析。将该宏绑定到一个键。运行 MFC 应用程序,当您想开始中断您自己的代码时,切换到 Visual Studio,按一下键和 presto,您将在第一次使用代码时中断。

另一个选项是创建一个 C++ 宏来检查是否设置了全局布尔值并在设置时执行 asm int 3 。在代码的每个(高级)函数的开头使用此宏。添加在 MFC 应用程序中按下某个按钮时设置全局布尔值的代码。这仅适用于 32 位可执行文件,您需要 64 位可执行文件中的一些内在函数,我不知道。

希望这会有所帮助。

干杯,

塞巴斯蒂安

【讨论】:

【参考方案3】:

有一个“暂停”按钮可以中断执行...或者您可以在所有可能的嫌疑人上设置一个断点。你不知道你的哪个函数被调用了——把它们都打断。然后你就会实现你的目标。

如果我的任何函数被调用,我的目标是中断进程。

【讨论】:

如果我按下暂停,它说当前位置没有可用的源代码,因为我没有其他模块的源代码。手动在所有函数(超过 1000 个)中设置断点会很痛苦。 使用调试条件。在您的每个函数中编译一些代码,这些代码将调用一些单段代码,或者将一个宏放在那里,或者您可以在其中编译以进行调试并编译出来以供发布。你这样做一次,是的 - 这是一种痛苦。但是一旦你完成了 - 你可以在每次需要时轻松地调试你的代码。

以上是关于在c ++中没有断点的中断进程的主要内容,如果未能解决你的问题,请参考以下文章

在两个进程之间共享内存(C、Windows)

C/C++ 中的结构赋值是原子的吗?

ctrl+c,ctrl+d,ctrl+z在linux程序中意义和区别

C命名管道不适用于多进程

默认工作进程不会在没有调试模式的 docker 中启动

GDB 没有停止 python 脚本中的“中断”命令