如何在GDB中仅查看指定共享库中符合名称模式的全局变量
如何在GDB中仅查看指定共享库中符合名称模式的全局变量
刚好我之前也碰到过这种情况——用info var MyPattern搜出来的全局变量一大堆,根本找不到目标库的内容,这几个方法亲测好用:
方法一:直接通过共享库名称限定搜索
首先你可以通过info dll(Windows系统)或者info shared(类Unix系统)命令,找到目标共享库的准确名称(比如libfoo.so、bar.dll这类)。
然后用带库名限定的info var命令搜索,启用正则匹配的话加上-r参数:
info var -r libfoo.so::MyPattern
如果你的模式是精确匹配,也可以去掉-r参数。注意如果库名带版本号(比如libfoo.so.1),最好写完整的名称,或者用通配符*来匹配,比如libfoo*::MyPattern。
方法二:通过地址范围过滤
同样从info dll或info shared里,你能看到每个共享库的加载地址区间(比如0x7f1234000000到0x7f1234100000)。
然后把这个地址范围作为参数传给info var,就能只列出该区间内符合名称模式的变量:
info var MyPattern 0x7f1234000000 0x7f1234100000
方法三:用维护命令结合过滤
如果需要更灵活的筛选,可以用maintenance info variables命令,它会输出变量的详细信息,包括所属的库路径,然后结合GDB的管道功能用grep过滤:
maintenance info variables MyPattern | grep libfoo.so
这个方式适合你需要同时匹配多个条件的场景,比如既要符合名称模式,又要属于某个特定路径下的库。
备注:内容来源于stack exchange,提问作者JenyaKh
相关产品推荐
相关产品推荐

