fdebug 调试器使用

reactos 源码带了一个调试工具fdebug, 这个调试器原本是通过串口来连接reactos,但实际上这种方式很麻烦,必须要有两台机器。比较好的方式就是通过虚拟机用pipe方式来调试,但首先就要修改fdebug的源代码,改为通过pipe来连接,打开rs232.c 文件,找到Rs232OpenPortWin32函数:

BOOL Rs232OpenPortWin32(TCHAR* CommPort)
{
	TCHAR	PortName[MAX_PATH];
	DWORD	ErrorCode;

	// First check and make sure they don't already have the
	// OBD2 connection open. We don't want to open things twice.
	if (hPortHandle != NULL)
	{
		_tprintf(TEXT("Port handle not NULL. Must be already open. Returning FALSE...\n"));
		return FALSE;
	}

	_stprintf(PortName, TEXT("\\\\.\\%s"), CommPort);

	hPortHandle = CreateFile(PortName,
							GENERIC_READ|GENERIC_WRITE,
							0,
							0,
							OPEN_EXISTING,
							0,
							0);

	if (hPortHandle == INVALID_HANDLE_VALUE)
	{
		hPortHandle = NULL;
		ErrorCode = GetLastError();

		_tprintf(TEXT("CreateFile(\"%s\") failed. GetLastError() = %lu.\n"), PortName, ErrorCode);

		return FALSE;
	}

	return TRUE;
}

这儿可以把PortName 改为\\\.\\pipe\com1;

然后在fdebug.c 的Rs232Thread函数处:

VOID Rs232Thread(VOID* Parameter)
{
	BYTE	Byte;
	TCHAR	String[MAX_PATH];
	MSG		msg;
	DWORD	dwNumberOfBytesWritten;

          UNREFERENCED_PARAMETER(Parameter);

	dwThreadId = GetCurrentThreadId();

	if (!Rs232OpenPortWin32(strComPort))
	{
		MessageBox(hMainWnd, TEXT("Error opening port!"), TEXT("Error"), MB_OK|MB_ICONSTOP);
		bConnected = FALSE;
		return;
	}

	//_stprintf(String, TEXT("%s,n,8,1"), strBaudRate); 注释掉这儿
	//if (!Rs232ConfigurePortWin32(String))
	//{
	//	MessageBox(hMainWnd, TEXT("Error configuring port!"), TEXT("Error"), MB_OK|MB_ICONSTOP);
	//	bConnected = FALSE;
	//	return;
	//}                                                注释掉这儿

	while (bConnected)
	{
		if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
			if (msg.message == WM_CHAR)
			{
				Rs232WriteByteWin32((BYTE)msg.wParam);

				if (bLocalEcho && msg.wParam != (WPARAM)TEXT('\r'))
				{
					PostMessage(hDisplayWnd, WM_CHAR, (WPARAM)msg.wParam, (LPARAM)0);

					if (hCaptureFile)
					{
						WriteFile(hCaptureFile, &msg.wParam, sizeof(TCHAR), &dwNumberOfBytesWritten, NULL);
					}
				}
			}
		}

		if (Rs232ReadByteWin32(&Byte))
		{
			_stprintf(String, TEXT("%c"), Byte);

			PostMessage(hDisplayWnd, WM_CHAR, (WPARAM)String[0], (LPARAM)0);

			if (hCaptureFile)
			{
				WriteFile(hCaptureFile, &String[0], sizeof(TCHAR), &dwNumberOfBytesWritten, NULL);
			}
		}
	}

	dwThreadId = 0;
	Rs232ClosePortWin32();
}


 

注释掉对 Rs232ConfigurePortWin32() 的调用。因为对pipe来说,是不用配置这样的参数的,然后就可以编译了。

 

默认情况下,fdebug并不会编译的(看来reactos本身是想淘汰掉这种调试工具,因为现在有了其他调试工具ReactosDBG)

打开freeldr目录下的freeldr.rebuild,增加如下的命令:

<directory name="fdebug">
 <xi:include href="fdebug/fdebug.rbuild" />
 </directory>

保存退出,在编译环境下执行:

make  freeldr_fdebug

这样就可以用了



 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值