3

在 GDB(gnu v 7.1-ubuntu)中,当我尝试使用strcmp来确定两个字符串是否相等时,我得到了非常奇怪的结果。p strcmp("hello","hello")正在给我结果-145947168

我尝试使用的所有内容strcmp或在 gdbstrncmp中返回的所有内容。-145947168我究竟做错了什么?

编辑(感谢 Carl 在评论中指向相关答案的指针):查看这个问题的答案:如何评估 GDB 中的函数?

显然,有时编译器会优化从外部库调用的函数,并在代码中定义一个调用您想要在 GDB 中访问的外部库的函数的函数将使其可用。

我将此添加到我的代码中:

#ifdef DEBUG
int mystrcmp(char *a, char *b){
        return strcmp(a,b);
}
int mystrncmp(char *a, char *b, int n){
        return strncmp(a,b,n);
}
#endif

然后重新制作-DDEBUG -g以启用这些帮助函数的编译以用于我的 gdb 调试。

(gdb) p mystrcmp("hello","hello")
$1 = 0
(gdb) p strcmp("hello","hello")
$2 = -145947168
4

0 回答 0