我试图在所有以“dc_api”开头的函数上设置断点,但我必须排除以“dc_api_port_counter”和“dc_api_send_reply”开头的函数。
关于“dc_api_port_counter”排除,请注意我确实想包含以“dc_api_port_something”开头的函数。
我使用正则表达式在线测试器并得出以下正则表达式: dc_api_(?!port_counter|send_reply).*
但是在使用的时候出现如下错误:
>(gdb) rbreak dc_api_(?!port_counter|send_reply).*
>!port_counter|send_reply).*: event not found
>(gdb)
没有简单的内置方法可以做到这一点。但是,可以通过几种方式完成。
首先,使用
rbreak
设置“太多”的断点。然后,诀窍是找到一种自动删除多余断点的方法。
一种直接的方法是用 Python 编写一些代码,循环遍历所有 gdb 断点。对于每个断点,它将检查
location
属性,如果应该排除它,则调用断点的 delete
方法。
GDB 具有便利功能,https://sourceware.org/gdb/onlinedocs/gdb/Convenience-Funs.html,$_regex(str, regex) 函数将正确处理正则表达式。但是,这可能旨在用作条件中断中的条件。