两种attach to process的方法

本文记录了一次针对SQL Server的KeepAlive功能的实验过程。作者尝试通过暂停或停止服务来模拟KeepAlive失败的情况,最终发现只有挂起SQL Server进程才能达到预期效果,并观察到了连接超时的现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

今天在做keepalive的实验,设法模拟keepalive不成功的场景,从而达到“ the local TCP will keep sending “Keep Alive” packet in an interval of KeepAliveInterval for TcpMaxDataRetransmissions times. ”的目的。但是通过:

  1. stop sqlserver服务,tcp\ip能够检测到服务断开,因此在netmon中可以看到最后一条信息是服务器端发给客户端的的keepalive,scale factor=0。
  2. pause sqlserver服务,keepalive继续进行,此时使用sqlcmd连接sql server 实例会提示数据库出去paused状态。

这两种方法都不能实现上面的场景。后来经过同事提示说试一试suspend sqlservr.exe这个进程试试看,看看还能不能keepalive。从而就有了本文的主题。

要达到suspend 进程可以通过attach to process的方法,主要有两种方式:

  1. 使用visual studio->debug->attach to process
  2. 使用windbg->file->attach to a process...

可惜即使我attach process了,keepalive孩子,但是无法使用sqlcmd连接数据库实例,不过和pause服务不同的是,这里会提示连接超时。

### GDB Attach 与 GDB Launch 的区别 在调试器配置中,`GDB Attach` 和 `GDB Launch` 是两种不同的调试方式,分别适用于不同的调试场景。两者的主要区别在于程序的启动方式和调试器的附加时机。 #### GDB Attach `GDB Attach` 用于将调试器附加到一个已经运行的进程上。这种调试方式允许调试一个在调试器启动之前就已经运行的程序。例如,当调试一个由系统脚本或其他进程启动的程序时,可以使用 `GDB Attach` 选项[^1]。这种方式特别适用于调试长期运行的服务或进程,或者当程序已经处于运行状态时。 在配置 `GDB Attach` 时,通常需要指定目标进程的 PID(进程 ID),以便调试器可以正确附加到该进程。以下是一个典型的 `GDB Attach` 配置示例: ```json { "name": "C++ Attach to Process", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/a.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", "miDebuggerServerAddress": "localhost:1234" } ``` #### GDB Launch `GDB Launch` 用于通过调试器直接启动一个新的程序进行调试。与 `GDB Attach` 不同,`GDB Launch` 会在调试器启动时直接运行程序,从程序的入口点开始调试。这种方式适用于需要从头开始控制程序执行的调试场景,例如调试程序的初始化过程或查找启动时的错误[^1]。 在 `GDB Launch` 配置中,通常需要指定可执行文件的路径以及调试器的路径。以下是一个典型的 `GDB Launch` 配置示例: ```json { "name": "C++ Debug (GDB)", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/a.out", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb" } ``` ### 调试配置信息 在 Visual Studio Code 中,调试配置信息存储在 `.vscode/launch.json` 文件中。该文件定义了调试会话的行为,包括调试器类型、程序路径、调试器路径等。调试器类型由 `type` 字段指定,通常为 `cppdbg`,表示使用 C/C++ 扩展提供的调试器支持。调试请求类型由 `request` 字段指定,可以是 `launch` 或 `attach`,分别对应 `GDB Launch` 和 `GDB Attach`。 调试器后端由 `MIMode` 字段指定,通常为 `gdb` 或 `lldb`,表示使用 GDB 或 LLDB 作为调试器后端。此外,`miDebuggerPath` 字段用于指定调试器的可执行文件路径,确保调试器能够正确启动。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值