如何告诉GCC发出由我命名的特定调试符号?

问题描述

| 我正在编写一个有状态的扫描器,并且希望每个状态更改都带有调试符号。 例如,在我的代码中,我调用了宏
SETSTATE(ST_xxx)
,它做了一些令人讨厌的事情,但是我也可以很容易地告诉GCC在该点发出基于名称
ST_xxx
的特定调试符号。 我需要完成的是在gdb中设置一个断点。 我想应该是2英镑左右。 如果我只知道...     

解决方法

虽然我可能会误解这个问题, 如何制作一个虚拟函数并在
SETSTATE
中调用它, 然后在该函数中设置断点? 例如:
void dummy_breakpoint() {}

#define SETSTATE(st) dummy_breakpoint(); ...usual process...
.gdbinit
中设置
break dummy_breakpoint
可能会节省一些人工。 编辑: 如何在following3ѭ中设置监视点,如下所示: 在
.gdbinit
中设置
watch dummy_variable
char dummy_variable; /* global variable */

#define SETSTATE(st) ++ dummy_variable; ...usual process...
但是,如果您的计算机运行缓慢,可能会使程序的执行速度变慢 环境不提供硬件监视点...     ,如果要将调试符号作为参考,可以使用标签来创建它们(只要确保未将其从调试信息中删除即可),尽管从未使用过gdb,但不确定它将像ollydbg在obj扫描/分析中一样获取标签。但是,将其视为断点,为什么不只使用调试陷阱(例如msvc \的
__debugbreak()
?),对于gcc变体,这里的内容可能有用:是否有可移植的等效项DebugBreak()/ __ debugbreak?     ,编译时使用-D ST_xxx 我使用它来使用宏启用调试消息。它用值1定义常数ST_xxx。