调试套接字服务器代码

时间:2012-06-12 18:28:06

标签: visual-studio-2010 debugging sockets visual-c++

我试图逐步完成我没写过的程序代码(我有源代码)。这是一个小型的http服务器。我可以放置断点,它们将在main()的线性路径中运行的任何点上受到尊重。但是,当我尝试在响应来自浏览器的连接而调用的一行上放置一个断点时,它就会被忽略。

关于调试套接字代码有什么我不知道的吗?我真的不太了解套接字编程,但这不是我想要看到的部分。

这是Visual C ++ 2010。

修改
我发现了这个问题。有一个对system的深度嵌套调用,它实际上是用不同的参数再次运行程序。所以它不是一个线程或套接字或其他什么,它实际上是一个全新的子进程。有没有办法让调试器继续进入这个?

1 个答案:

答案 0 :(得分:1)

选项1

更改“系统”调用以将“--waitfordebugger”参数传递给子进程。然后在main或WinMain中,检查为此参数传递的命令行args。如果检测到,请使代码进入无限循环。

volatile int x = false;
while (x == false)
{
    Sleep(100);
}

当您的子进程生成时,使用Visual Studio“附加”到子进程(顶级菜单,选择“Debug”和“Attach To Process ...”)。然后在Sleep语句上设置一个断点。当命中断点时(应立即),将监视窗口中的“x”更改为true,将新断点设置为要逐步执行的代码中的位置。然后按“继续”(F5)键以继续执行程序。

此技术还有其他变体,包括等待IsDebuggerPresent()API返回TRUE。

选项2

在要调试的代码中的某个位置附近,插入一个DebugBreak()语句。这通常会创建崩溃对话框以弹出打开。如果它提示您附加调试器,请让它。否则,只需按照选项1中的说明直接连接调试器,然后按崩溃对话框上的相应按钮继续。这种方法的YMMV取决于已经安装了什么类型的异常处理程序和/或系统函数调用是否设置为隐藏崩溃。

相关问题