Skip to main content
Glama
swesmith-repos

MCP Server for WinDbg Crash Analysis

test_cdb.py3.74 kB
import os import pytest from mcp_windbg.cdb_session import CDBSession, CDBError, DEFAULT_CDB_PATHS # Path to the test dump file TEST_DUMP_PATH = os.path.join(os.path.dirname(__file__), 'dumps', 'DemoCrash1.exe.7088.dmp') def setup_cdb_session(): """Helper function to create a CDB session""" if not os.path.exists(TEST_DUMP_PATH): pytest.skip("Test dump file not found") if not any(os.path.exists(path) for path in DEFAULT_CDB_PATHS): pytest.skip("CDB executable not found") return CDBSession( dump_path=TEST_DUMP_PATH, timeout=20, verbose=True ) def test_basic_cdb_command(): """Test basic CDB command execution""" session = setup_cdb_session() try: output = session.send_command("version") assert len(output) > 0 assert any("Microsoft (R) Windows Debugger" in line for line in output) finally: session.shutdown() def test_command_sequence(): """Test multiple commands in sequence""" session = setup_cdb_session() try: # Basic command sequence commands = ["version", ".sympath", "!analyze -v", "lm", "~"] results = [] for cmd in commands: output = session.send_command(cmd) results.append((cmd, output)) assert len(output) > 0 # Check expected output patterns assert any("Microsoft (R) Windows Debugger" in line for line in results[0][1]) assert any("Symbol search path is:" in line for line in results[1][1]) assert any("start" in line.lower() for line in results[3][1]) finally: session.shutdown() def test_module_inspection(): """Test module inspection capabilities""" session = setup_cdb_session() try: # Get module list modules_output = session.send_command("lm") # Find a common Windows module target_modules = ['ntdll', 'kernel32'] module_name = None for target in target_modules: for line in modules_output: if target in line.lower(): parts = line.split() for part in parts: if target in part.lower(): module_name = part break if module_name: break if module_name: break assert module_name is not None # Get module details module_info = session.send_command(f"lmv m {module_name}") assert len(module_info) > 0 assert any(module_name.lower() in line.lower() for line in module_info) # Get stack info stack_info = session.send_command("k 5") assert len(stack_info) > 0 finally: session.shutdown() def test_thread_context(): """Test thread context operations""" session = setup_cdb_session() try: # Get thread list thread_list = session.send_command("~") # Select first thread thread_id = "0" for line in thread_list: if line.strip().startswith("#"): parts = line.split() if len(parts) > 1: thread_id = parts[1].strip(":") break # Switch to thread and check registers session.send_command(f"~{thread_id}s") registers = session.send_command("r") assert len(registers) > 0 assert any("eax" in line.lower() or "rax" in line.lower() for line in registers) # Check stack trace stack = session.send_command("k") assert len(stack) > 0 finally: session.shutdown() if __name__ == "__main__": pytest.main(["-v", __file__])

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/swesmith-repos/svnscha__mcp-windbg.20b852b5'

If you have feedback or need assistance with the MCP directory API, please join our Discord server