我写了这段代码:
#include <libyahoo2/yahoo2.h>
#include <libyahoo2/yahoo2_callbacks.h>
int main() {
int id ;
char username[255] = "slam";
char password[255] = "ss" ;
id = yahoo_init(username, password);
enum yahoo_status mYahoo ;
mYahoo = YAHOO_STATUS_AVAILABLE ;
yahoo_login(id , mYahoo );
return 0;
}
将其编译,gcc -l yahoo2 y.c -o yahoo
并使用./yahoo
运行它会给我一个错误:Segmentation fault
(gdb) run
Program received signal SIGSEGV, Segmentation fault.
0x001379b1 in yahoo_login (id=1, initial=0) at libyahoo2.c:1735
第1735行代码是:
tag = YAHOO_CALLBACK(ext_yahoo_connect_async) (yd->client_id,
host, yss->pager_port, yahoo_connected, ccd, 0);
看到这个:
(gdb) list YAHOO_CALLBACK
Function "YAHOO_CALLBACK" not defined.
如何调试?
答案 0 :(得分:1)
如何调试?
执行以下命令:
(gdb) print yd->client_id
(gdb) print yss->pager_port
我的猜测是上述一个或两个命令都会失败,因为yd
或yss
为NULL。
如果是这样,问题在于libyahoo2.c中的早期,它(显然)没有正确检查错误。
您无法list YAHOO_CALLBACK
的原因很可能是它是一个宏。查看libyahoo2/yahoo2_callbacks.h
- 它很可能在那里定义。
另外,您的链接命令行:
gcc -l yahoo2 y.c -o yahoo
完全是虚假的。正确的命令行应该是:
gcc y.c -o yahoo -lyahoo2
您可能需要阅读this explanation以了解为什么命令行中的源和库的顺序很重要。