问题描述
|
我正在编写一个有状态的扫描器,并且希望每个状态更改都带有调试符号。
例如,在我的代码中,我调用了宏
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。