GDB - strcmp 不工作:__strcmp_sse2_unaligned
GDB - strcmp not working: __strcmp_sse2_unaligned
我无法使用 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")
它 returns 一些无意义的值,例如 -143655312
这是 "solve" 我的问题的不太优雅的方法。
我可以在自己的代码中定义一个函数:
int mystrcmp(const char *str1, const char* str2){
return strcmp(str1, str2);
}
现在我可以将此函数用于我的条件断点。
但这不是真正的调试,是吗?当您必须更改原始代码以对其进行调试时,您就输了!
那我错过了什么?
strcmp
是 特殊的 -- 它是一个运行时函数选择器 (IFUNC),returns 是(几个之一的地址)可能)在当前处理器上使用的 strcmp
的实现。
您应该可以这样做:
break x if __strcmp_sse2_unaligned(str.c_str(), "foo") == 0
我无法使用 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")
它 returns 一些无意义的值,例如 -143655312
这是 "solve" 我的问题的不太优雅的方法。 我可以在自己的代码中定义一个函数:
int mystrcmp(const char *str1, const char* str2){
return strcmp(str1, str2);
}
现在我可以将此函数用于我的条件断点。 但这不是真正的调试,是吗?当您必须更改原始代码以对其进行调试时,您就输了!
那我错过了什么?
strcmp
是 特殊的 -- 它是一个运行时函数选择器 (IFUNC),returns 是(几个之一的地址)可能)在当前处理器上使用的 strcmp
的实现。
您应该可以这样做:
break x if __strcmp_sse2_unaligned(str.c_str(), "foo") == 0