首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDB - strcmp不工作:__strcmp_sse2_unaligned

GDB - strcmp不工作:__strcmp_sse2_unaligned
EN

Stack Overflow用户
提问于 2018-08-20 16:23:28
回答 1查看 1.6K关注 0票数 4

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

代码语言:javascript
复制
break x if strcmp(str.c_str(), "foo") == 0

你为什么要问?

因为:

代码语言:javascript
复制
print strcmp("hello", "hello")

产量‘s

代码语言:javascript
复制
(int (*)(const char *, const char *)) 0x7ffff76ffe70 <__strcmp_sse2_unaligned> 

即使在将其转换为整数时:

代码语言:javascript
复制
print (int)strcmp("hello", "hello")

它返回一些荒谬的值,比如-143655312。

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

代码语言:javascript
复制
int mystrcmp(const char *str1, const char* str2){
    return strcmp(str1, str2);                   
}                                                

现在我可以用这个函数来代替我的条件断点。但这并不是真正的调试,对吧?当您必须更改您的原始代码来调试它时,您已经输掉了游戏!

那我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-20 16:32:55

strcmp是特殊的--它是一个运行时函数选择器(IFUNC),它返回要在当前处理器上使用的strcmp的(几种可能的实现之一)的地址。

相反,您应该能够这样做:

代码语言:javascript
复制
break x if __strcmp_sse2_unaligned(str.c_str(), "foo") == 0
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51934903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档