我有一台Vista 32位机器,我想启用本地内核调试.在WinDbg中,我选择了File/Kernel Debug并选择了Local选项卡并单击ok.我收到以下消息.
系统不支持本地内核调试....默认情况下,在Windows Vista中禁用本地内核调试,必须运行'bcdedit -debug on'并重新启动才能启用它.
我天真地按照说明打开了一个提升的命令提示符,然后键入'bcdedit -debug on'并重新启动.
但是,在重新启动时,系统会在进入登录屏幕时挂起 - 或者在我输入用户名和密码后立即挂起.
我怀疑发生了什么是因为启用了调试器,在内核调试器进程中触发了用户模式异常,它正在等待我从附加的调试器输入一些输入?
我希望在实际的目标机器上进行调试.
我的问题是每次我启动 - 无论我选择什么F8启动选项 - 它总是挂起或者到目前为止然后重新启动 - 然后挂起.
以安全模式启动 - 接近登录屏幕然后重新启动.这同样适用于命令行和网络引导选项.最后知道好的配置 - 也挂起.
有没有办法在Windows加载之前更改启动选项,以便我可以关闭内核调试.我只有一个启动配置,事后看来,我的问题 - 我应该为我的调试启动选项创建了第一个启动配置的副本.
不幸的是,系统没有串口,所以我无法通过它进行调试.
我现在能想到的唯一选择是尝试通过USB端口连接来自不同机器的调试器.但是,我不需要将目标PC配置为接受USB端口上的调试器,或者如果我获得正确的调试USB电缆,这是否正常工作?
我有一个WCF Windows服务,在服务的配置文件中指定了端点.
<baseAddresses>
<add baseAddress="net.tcp://localhost:9000/MyEndpoint"/>
</baseAddresses>
Run Code Online (Sandbox Code Playgroud)
一切正常.但是,在某些情况下,端口9000可能已在使用中,导致ServiceHost在Open()上失效.我需要能够在代码中覆盖配置文件中指定的默认基址.例如,假设环境变量包含要使用的端口号.
有没有办法以编程方式执行此操作?
在构造ServiceHost之后,我可以看到BaseAddresses属性,该属性返回从配置文件中获取的Uri列表.但是,这是一个只读集合,因此不能用于更改默认值.
如果我在ServiceHost构造函数中指定替换Uri,我得到
此集合已包含方案net.tcp的地址.此集合中每个方案最多只能有一个地址.如果您的服务在IIS所驻留你可以通过设置"system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled"为真或指定"system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters"解决问题.
如果我创建一个CustomServiceHost并尝试设置替换基地址,我会得到相同的错误.
class CustomHost : ServiceHost
{
public CustomHost(Type serviceType) : base (serviceType)
{
}
protected override void ApplyConfiguration()
{
base.ApplyConfiguration();
this.AddBaseAddress(new Uri("net.tcp://localhost:9010/MyEndpoint"));
}
}
Run Code Online (Sandbox Code Playgroud)
我知道,如果我离开这个配置文件基址的空白,并通过基址到ServiceHost的构造函数,然后是正常工作 - 即我可以指定新的基地.但是,我想使用配置文件来指定默认值(而不是硬编码).