【问题标题】:GDB - strcmp not working: __strcmp_sse2_unalignedGDB - strcmp 不工作:__strcmp_sse2_unaligned
【发布时间】:2019-01-26 19:53:33
【问题描述】:

我无法使用 strcmp 在 GDB 中创建条件断点:

break x if strcmp(str.c_str(), "foo") == 0

你为什么这么问?

因为:

print strcmp("hello", "hello")

产量

(int (*)(const char *, const char *)) 0x7ffff76ffe70 <__strcmp_sse2_unaligned> 

即使将其转换为整数:

print (int)strcmp("hello", "hello")

它返回一些无意义的值,例如 -143655312

这是“解决”我的问题的一种不太优雅的方式。 我可以在自己的代码中定义一个函数:

int mystrcmp(const char *str1, const char* str2){
    return strcmp(str1, str2);                   
}                                                

现在我可以使用这个函数来代替我的条件断点。 但这不是真正的调试,是吗?当您必须更改原始代码以进行调试时,您就输了!

那么我错过了什么?

【问题讨论】:

    标签: c++ gdb breakpoints strcmp conditional-breakpoint


    【解决方案1】:

    strcmp特殊的——它是一个运行时函数选择器 (IFUNC),它返回 strcmp 的(几个可能的)实现的地址,用于当前处理器。

    您应该可以这样做:

    break x if __strcmp_sse2_unaligned(str.c_str(), "foo") == 0
    

    【讨论】:

    • 是否可以修改用户代码中的IFUNC 以返回指向用户定义函数的指针?
    猜你喜欢
    • 2010-11-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多