我在计算机网络课程中,我正在编写一个简单的服务器,它只发送和接收来自客户端的消息(已给出)。但是,当给定客户端连接时,我的服务器会出现分段错误。如何运行GDB来调试它?我尝试使用gdb运行服务器,但它只是挂起,因为我的服务器中有一个无限的while循环,我不知道如何同时运行客户端来触发segfault。有人可以帮忙吗?
答案 0 :(得分:1)
我不知道如何同时运行客户端来触发段错误。
简单:您打开另一个窗口,然后从那里运行客户端。
答案 1 :(得分:0)
如果您的服务器为每个连接的客户端生成(fork())单独的进程,您可能需要设置跟随fork模式:http://www.delorie.com/gnu/docs/gdb/gdb_26.html “set follow-fork-mode child”将在accept()和fork()之后立即开始调试生成的进程。
另一种选择是分析核心文件。默认情况下,Coredumps大多数都处于禁用状态,因此您需要启用它们:
ulimit -c unlimited
运行你的服务器,让它进行segfault并启动gdb,将它指向core和你的二进制文件:
gdb -c ./core.xxxx ./server