outputdebugstring我在VS2010下使用 OutputDebugString 看到的为什么是一堆乱码
outputdebugstring 时间:2021-06-10 阅读:(
)
debugview工具 能捕捉 printf么
在程序中使用如下函数:
1> OutputDebugString 或者在MFC中使用TRACE
2> 内核模式中使用Out_Debug_String,DbgPrint ,_Debug_Printf_Service
编译程序为DEBUG版本,然后运行程序(不是在vs 中运行,是单独运行),打开debugview 就可以在其中看到输出的调试信息。
Debugview 也支持远程调试,在本机运行Dbgview.exe /c/s/t 可以让DebugView以服务的形式运行。
在远端打开Debugview,点击Computer/connect ,输入查看调试信息主机的IP ,点击确定即可。
UE4的停止调试声音怎么关闭
首先,编译出引擎。
对于学习目的来说,从网上下载一份就够了,编译步骤简单的描述一下:我们把下载的代码解压到指定的目录,包括UnrealEngine-4.*.*-release.7z,Required_1of2.7z,Required_2of2.7z,三个文件。
解压完成之后,在解压目录中,双击GenerateProjectFiles.bat 运行,等待完成。
然后会生成UE4.sln文件。
这样就可以打开UE4解决方案,编译出引擎。
如何在托管代码中使用 autoproxy
在托管代码中使用 roxy
若要在托管代码中实现 roxy,请按照下列步骤操作:
创建使用 roxy 托管的 DLL。
创建示例应用程序,以验证 roxy 的实现。
back to
创建托管的 DLL 使用 roxy
若要进行托管的 DLL 使用 WinHTTP roxy 函数检索代理信息,请按照下列步骤操作:
启动 Microsoft Visual 。
在 文件 菜单上指向 新建,然后单击 项目。
在 新建项目 对话框。
在 项目类型 框中,单击 Visual c + + 项目,然后单击 模板 下的 托管 c + + 类库。
如果使用的 Visual 2003年单击 模板 下的 类库 (.NET)。
在 名称 框中键入 roxy,然后单击 确定。
在解决方案资源管理器中,用鼠标右键单击 roxy.h,然后单击 打开。
roxy.h 文件中的现有代码替换下面的代码:
// AutoProxy.h
#define UNICODE
#include
#include
#include "path of the header filewinhttp.h"
#include
#ment (lib, "winhttp.lib")
#pragma once
using namespace System;
using namespace System::Runtime::InteropServices;
namespace AutoProxy
{
public __gc class Class1
{
private:
TCHAR* szUrl;
TCHAR* szAutoProxyLocation;
public:
Class1 (String* szUrlParam)
{
TCHAR szMessage[1024];
szUrl = (TCHAR *)(void*)Marshal::StringToCoTaskMemUni(szUrlParam);
swprintf (szMessage, L"Initializing class for URL %s with autorpxy
",
szUrl);
OutputDebugString (szMessage);
szAutoProxyLocation = NULL;
CoInitialize(NULL);
};
Class1 (String* szUrlParam, String* proxyUrl)
{
TCHAR szMessage[1024];
szUrl = (TCHAR *)(void*)Marshal::StringToCoTaskMemUni(szUrlParam);
szAutoProxyLocation = (TCHAR*)(void*)Marshal::StringToCoTaskMemUni(proxyUrl);
swprintf (szMessage, L"Initilizing class for url %s with proxy location %s
",
szUrl, szAutoProxyLocation);
OutputDebugString (szMessage);
CoInitialize(NULL);
};
~Class1 ()
{
OutputDebugString (L"Class1 destruct
");
CoUninitialize ();
};
String* GetProxyForUrl()throw (TCHAR*)
{
TCHAR szError [1024];
HINTERNET hHttpSession = NULL;
WINHTTP_AUTOPROXY_OPTIONS AutoProxyOptions;
WINHTTP_PROXY_INFO ProxyInfo;
DWORD cbProxyInfoSize = sizeof(ProxyInfo);
TCHAR* szProxy;
ZeroMemory( &AutoProxyOptions, sizeof(AutoProxyOptions) );
ZeroMemory( &ProxyInfo, sizeof(ProxyInfo) );
hHttpSession = WinHttpOpen( L"WinHTTP AutoProxy Sample/1.0",
WINHTTP_ACCESS_TYPE_NO_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS,0
);
// Exit if the WinHttpOpen function fails.
if( !hHttpSession )
{
// Clean the WINHTTP_PROXY_INFO structure.
if( ProxyInfo.lpszProxy != NULL )
GlobalFree(ProxyInfo.lpszProxy);
if( ProxyInfo.lpszProxyBypass != NULL )
GlobalFree( ProxyInfo.lpszProxyBypass );
}
// Set up the roxy call.
if (szAutoProxyLocation)
{
// The proxy auto-configuration URL is already known.
// Therefore, auto-detection is not required.
AutoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
// Set the proxy auto configuration URL.
AutoProxyOptions. lpszAutoConfigUrl = szAutoProxyLocation;
}
else
{
// Use auto-detection because you do not know a PAC URL.
AutoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_AUTO_DETECT;
// Use both Dynamic Host Configuration Protocol (DHCP)
// and Domain Name System (DNS) based auto-detection.
AutoProxyOptions.dwAutoDetectFlags = WINHTTP_AUTO_DETECT_TYPE_DHCP
|WINHTTP_AUTO_DETECT_TYPE_DNS_A;
}
// If obtaining the PAC script requires NTLM/Negotiate
// authentication, automatically supply the domain credentials
// of the client.
AutoProxyOptions.fAutoLogonIfChallenged = TRUE;
// Call the WinHttpGetProxyForUrl function with our target URL.
if( WinHttpGetProxyForUrl( hHttpSession,szUrl,&AutoProxyOptions,&ProxyInfo))
{
switch (essType)
{
case WINHTTP_ACCESS_TYPE_DEFAULT_PROXY:
OutputDebugString (L"WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
");
break;
case WINHTTP_ACCESS_TYPE_NO_PROXY:
OutputDebugString (L"WINHTTP_ACCESS_TYPE_NO_PROXY
");
break;
case WINHTTP_ACCESS_TYPE_NAMED_PROXY:
OutputDebugString (L"WINHTTP_ACCESS_TYPE_NAMED_PROXY
");
break;
}
if (ProxyInfo.lpszProxy)
{
szProxy = new TCHAR [lstrlen (ProxyInfo.lpszProxy)];
lstrcpy (szProxy, ProxyInfo.lpszProxy);
}
// Clean the WINHTTP_PROXY_INFO structure.
if (ProxyInfo.lpszProxy != NULL)
GlobalFree(ProxyInfo.lpszProxy);
if (ProxyInfo.lpszProxyBypass != NULL)
GlobalFree(ProxyInfo.lpszProxyBypass);
}
else
{
DWORD dwErr = GetLastError();
switch (dwErr)
{
case ERROR_WINHTTP_AUTODETECTION_FAILED:
swprintf(szError, L"ERROR_WINHTTP_AUTODETECTION_FAILED
");
break;
case ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT:
swprintf(szError,L"ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT
");
break;
case ERROR_WINHTTP_INCORRECT_HANDLE_TYPE:
swprintf(szError,L"ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
");
break;
case ERROR_WINHTTP_INVALID_URL:
swprintf(szError,L"ERROR_WINHTTP_INVALID_URL
");
break;
case ERROR_WINHTTP_LOGIN_FAILURE:
swprintf(szError,L"ERROR_WINHTTP_LOGIN_FAILURE
");
break;
case ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT:
swprintf(szError,L"ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT
");
break;
case ERROR_WINHTTP_UNRECOGNIZED_SCHEME:
swprintf(szError,L"ERROR_WINHTTP_UNRECOGNIZED_SCHEME
");
break;
default:
swprintf (szError, L"Error %d
", dwErr);
}
throw (new Exception(szError));
}
// Close the WinHTTP handles.
if( hHttpSession != NULL )
WinHttpCloseHandle( hHttpSession );
// Return the proxy settings.
Marshal::FreeHGlobal(szUrl);
return new String (szProxy);
}
};
}
注意 在此的代码 path of the header file 是一个占位符 winhttp.h 文件在您的计算机上的路径。
与 Microsoft 平台软件开发工具包 (SDK) 包括了 Winhttp.h 文件和 $ Winhttp.lib 文件。
要下载平台 SDK,请访问下面的 Microsoft 网站:
/msdownload/platformsdk/sdkupdate/
在解决方案资源管理器中,用鼠标右键单击 roxy,然后单击 属性。
roxy 属性页 对话框出现。
在左窗格中单击 配置属性,下的 链接器,然后单击 输入。
在右窗格中 附加依赖项 框中键入 path of winhttp library winhttp.lib"
注意path of winhttp library 是 Winhttp.lib 文件在您的计算机上的占位符。
在 附加依赖项 框中键入 msvcrt.lib。
在 强制符号引用 框中键入 __DllMainCRTStartup@12,然后单击 确定。
在 生成 菜单上单击 生成解决方案,以生成项目。
back to
创建示例应用程序,以验证 roxy 的实现
若要创建一个示例应用程序,它使用托管的 DLL 由使用 Visual ,然后显示您创建的代理服务器设置,请按照下列步骤操作:
启动 Visual 。
在 文件 菜单上指向 新建,然后单击 项目。
在 新建项目 对话框。
单击 项目类型 下的 Visual C# 项目、 在 模板 框中,单击 控制台应用程序,然后单击 确定。
默认状态下,创建名为 Class1.cs 文件。
添加到您创建的 roxy.dll 文件的引用。
若要这样做,请按照下列步骤操作:
在解决方案资源管理器中,右击 引用,然后单击 添加引用。
在 添加引用 对话框。
在 选项卡上单击 浏览。
找到您的计算机上 roxy.dll 文件,然后单击 打开。
添加引用 对话框中单击 确定。
Class1.cs 文件中该命名空间声明的开头添加以下代码:
using AutoProxy;
将下面的代码添加到 Class1.cs 文件的 Main 方法:
AutoProxy.Class1 myProxy = new AutoProxy.Class1("", "http://localhost/PAC/proxy.pac");
try
{
Console.WriteLine ("
Proxy settings for the URL are:
{0}
", myProxy.GetProxyForUrl() );
Console.Read();
}
catch (Exception myError)
{
Console.WriteLine (myError.Message);
Console.Read();
}
注意 在此的代码 roxy 配置文件的 URL 路径。
如果您没有在计算机上配置的 roxy,您可以按照以下步骤来配置用于测试目的的 roxy:
启动记事本。
将以下代码粘贴到记事本中:
function FindProxyForURL(url, host)
{
return "PROXY 192.168.1.1:8080";
}
在此代码的 注释,192.168.1.1 是您的代理服务器的 IP 地址并 8080 是使您能够访问代理服务器端口。
将文件另存为 Proxy.pac。
创建虚拟目录的 Proxy.pac 文件您在步骤 6 c 中创建的。
有关创建虚拟目录的其他信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
172138如何在 Information Services (IIS) 中创建虚拟目录
注意内容的文件夹路径必须是 Proxy.pac 文件的保存位置文件夹的路径。
在 生成 菜单上单击 生成解决方案,以生成应用程序。
在 调试 菜单上单击 $ 开始 以运行该应用程序。
您可以看到在输出中的代理设置。
注意代理服务器的 URL 获取特定请求的 URL 后,您可以使用 HttpWebRequest.Proxy 属性将此属性设置为您的请求。
此外,您可以选择通过您的应用程序所做的所有请求此代理服务器使用 GlobalProxySelection.Select 方法。
Sysinternals Suite 里面常用工具的作用
我比较常用到的几个Sysinternals工具:
* Autoruns.exe:这个可以用来查看Windows在启动是会自动运行那些程序/服务等。
它会检查很多地方,比如象常见的注册表里面的HKLMSOFTWAREMicrosoftWindowsCurrentVersionRun键值、资源管理器或IE的加载项等,这在查找一些随着系统启动加载的流氓软件等时应该会有用。
* Bginfo.exe:这个工具可以在你的桌面上显示你的一些系统信息,如机器名、CPU类型、内存、硬盘剩余空间什么的。
如果你一个人用好几台电脑并且都是通过远程桌面在使用的话,这个工具倒是可以帮你分清楚你是在哪台电脑上。
* Dbgview.exe(DebugView):可以用来查看你自己(或者别人)写的程序里面通过OutputDebugString输出的调试信息。
* ProcExp.exe(Process Explorer):这个可以替代Windows默认的的任务管理器。
为系统当前运行的所有进程提供更丰富的信息,如打开的句柄(如文件句柄等),动态连接的DLL(这个比较常用)。
* Procmon.exe(Process Monitor):可以监视系统里面各个应用程序读写文件/注册表等的各种事件/文件名/注册表键值等等。
对了,这个工具合并了原来分离的两个工具-文件操作监控FileMon和注册表操作监控RegMon。
* ZoomIt.exe:这个在你给别人做演示的时候很有用。
你可以很方便地用热键放大屏幕,并可移动鼠标在屏幕的不同部分平移,滑动滚轮调节放大比例。
也可以用热键激活能在屏幕上直接画图的彩色笔。
下面几个是在命令行上运行的:
* pskill.exe:可以在命令行直接杀死某个当前运行的进程。
杀死进程的速度比用任务管理器结束进程快得多!
* pslist.exe:可以在命令行上列举出当前系统运行的全部进程的名字以及其它信息。
* regjump:自动打开注册表编辑器并跳转到你指定的某个键的位置。
其它还有一些跟网络相关的工具,因为我对于网络不是太熟悉,所以没有什么了解。
其他有用过的朋友可以补充。
真心求OutputDebugString怎么用
比如很常见的,程序在debug下运行正常,release下崩溃,就可以用 OutputDebugString( _T("函数1调用开始") ); OutputDebugString( _T("函数2调用开始") ); OutputDebugString( _T("函数3调用开始") ); 等等信息来判断是在执行哪一个函数时发生的...我在VS2010下使用 OutputDebugString 看到的为什么是一堆乱码
OutPutDebugString((LPCWSTR)s) //你这个强制转换有问题,
OutPutDebugString(s) 不用转换就OK
转换这个LPCTSTR类型也可以的。
PhotonVPS 服务商我们是不是已经很久没有见过?曾经也是相当的火爆的,我们中文习惯称作为饭桶VPS主机商。翻看之前的文章,在2015年之前也有较多商家的活动分享的,这几年由于服务商太多,乃至于有一些老牌的服务商都逐渐淡忘。这不有看到PhotonVPS商家发布促销活动。PhotonVPS 商家七月份推出首月半价Linux系统VPS主机,首月低至2.5美元,有洛杉矶、达拉斯、阿什本机房,除提供普...
zji怎么样?zji是一家老牌国人主机商家,公司开办在香港,这个平台主要销售独立服务器业务,和hostkvm是同一样,两个平台销售的产品类别不一平,商家的技术非常不错,机器非常稳定。昨天收到商家的优惠推送,目前针对香港邦联四型推出了65折优惠BGP线路服务器,性价比非常不错,有需要香港独立服务器的朋友可以入手,非常适合做站。zji优惠码:月付/年付优惠码:zji 物理服务器/VDS/虚拟主机空间订...
Webhosting24宣布自7月1日起开始对日本机房的VPS进行NVMe和流量大升级,几乎是翻倍了硬盘和流量,价格依旧不变。目前来看,日本VPS国内过去走的是NTT直连,服务器托管机房应该是CDN77*(也就是datapacket.com),加上高性能平台(AMD Ryzen 9 3900X+NVMe),还是有相当大的性价比的。此外在6月30日,又新增了洛杉矶机房,CPU为AMD Ryzen 9...
outputdebugstring为你推荐
水晶易表水晶报表是什么?主要有什么用处?at89s52单片机AT89S52单片机和AT89C51单片机的区别orphanremovalhibernate一对多,操作一的一方,如何删除多的一方的数据。腾讯汽车网可以了解汽车知识的权威网站大概有哪些印度尼西亚国家代码手机上的国家代码是什么遗传算法实例求助fortran语言编写的混合遗传算法例子那位大哥大姐有?kjavaKJAVA业务信息费是什么东西啊,我怎么会被莫莫名其妙的扣掉11元啊点心os点心操作系统?什么是网络地址什么是IP地址?鸿道集团王老吉、鸿道集团、加多宝集团、广药公司是怎么回事?
ip代理地址 已备案未注册域名 美国服务器租用 企业域名备案 老域名全部失效请记好新域名 互联网域名管理办法 香港bgp机房 京东云擎 地址大全 镇江联通宽带 qingyun bgp双线 佛山高防服务器 umax120 能外链的相册 国外视频网站有哪些 香港亚马逊 创建邮箱 海外空间 中国电信网络测速 更多