如何解决如何告诉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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。