小编dmi*_*ond的帖子

如何设置"svnserve --service"在Windows上运行?

从cmdline开始时

svnserve.exe -d -r d:\svn\mytools
Run Code Online (Sandbox Code Playgroud)

一切正常.

然后我试图将其设置为以Windows服务运行:

@echo off
set SvnHome=C:\Program Files\TortoiseSVN
set SvnRepository=D:\Svn\mytools
sc delete SvnMyTools
sc create SvnMyTools binPath= "%SvnHome%\bin\svnserve.exe --service -r %SvnRepository%" start=   delayed-auto type= share
Run Code Online (Sandbox Code Playgroud)

服务已安装,但无法启动.它一直报告错误

Error 1083: The executable program that this service is configured to run in does not implement the service.
Run Code Online (Sandbox Code Playgroud)

我曾尝试使用regedit编辑服务cmdline,因此尝试添加双引号arround ref to exe,尝试更改cmdline参数(使用-d代替--service,同时使用-d--service)等等.有时报告的错误看起来有点不同,但无论如何都不起作用.:-(

问题是 - 如何设置它使其在Windows 7 x64上作为服务工作?有可能吗?我的意思是 - 如果" - service"cmdline开关能够在svnserve中工作吗?

注意:svnserve版本是1.7.9(r1462340).其余的TortoiseSVN组件是1.7.12.24070.

提前致谢.

windows service svnserve

5
推荐指数
2
解决办法
1万
查看次数

转储文件 + PDB 文件 - 是否可以在一台 PC 上创建转储,然后在另一台 PC 上进行调查?

一个特定的问题只能在客户方重现。尽管我们进行了所有尝试,但我们无法在本地复制它。

但我知道 Windows 2008 R2 中的 TaskMgr 可以为进程创建转储文件。所以,我的问题是否可以在客户站点上为我们软件的某个进程创建转储,然后在本地调查该转储文件?

我们已经对我们的软件进行了新的构建(我们为所有二进制文件保存了一个构建沙箱和 *.PDB 文件)。然后我们在现场安装了它,现在我们正在等待客户报告问题再次发生时,因此我们将为挂起过程创建一个转储文件,然后尝试对其进行调查。

我的问题有两部分:

  1. 这样的方法会奏效吗?
  2. 如果是 - 如何做到这一点?

目前我怀疑这是否可行。因为我试图在我的本地 Win 2008 R2 VM 上创建一个验证测试。我使用.PDB 文件Sleep(30000)构建所有文件,然后我以一种模式运行我们的软件,当它在中间暂停很长时间时,我在 TaskMgr 中单击“创建转储文件”,恰好在它暂停时(它的简单调用)。然后我尝试在 WinDbg 中加载该转储文件并检查我能在那里找到什么。让我对这种方式感到悲观的第一件事是错误的堆栈跟踪。特别是 - 我在 WinDbg 中看不到完整的堆栈跟踪。它只显示 wow64 .dll 和 ntdll.dll 模块的堆栈跟踪,我看不到我们代码的堆栈跟踪。特别是我只看到这个:

wow64cpu!TurboDispatchJumpAddressEnd+0x6c0
wow64cpu!TurboDispatchJumpAddressEnd+0x56b
wow64!Wow64SystemServiceEx+0x1ce
wow64!Wow64LdrpInitialize+0x42a
ntdll!RtlUniform+0x6e6
ntdll!RtlCreateTagHeap+0xa7
ntdll!LdrInitializeThunk+0xe
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用调试器附加进程时,我看到一个完整的调用堆栈,如下所示:

ntdll.dll! 7754fd910
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!7754fd9l0
KernelBase.dll! 76ae3bd50
KernelBase.dll! 76ae44a 5Q
ScrVm.DLL!Profiler::DoSleep(intmilliseconds=30000) Line 205
ScrVm.DLL!Script::VmToolKit::iMethod_Sleep(unsigned …
Run Code Online (Sandbox Code Playgroud)

windbg dump crash-dumps pdb

1
推荐指数
1
解决办法
696
查看次数

为什么 C++ RTTI 不能按我的预期工作?

注意:MRE 示例太大,无法在此处发布(!),因此我将其存储在我的谷歌驱动器上,这里是一个链接 - https://drive.google.com/uc?id=1BUDD2DhumdY2eVwO5BffyaQfjVIdABb3&export=download

我需要调整使用 Xerces(1.6)/Xalan(1.3) 的非常旧的库以使用新的 Xerces(3.2.5)/Xalan(1.12)。原因很简单,因为使用现代 Microsoft C++ 编译器和 STL 几乎不可能构建此代码。

为了保持接口兼容,我必须对一些 Xerces/Xalan 对象使用包装类。包装器将 Xerces/Xalan 对象存储为void*指针。我想使用 RTTI 添加类型转换验证。但出了点问题...

这是强制转换验证函数的代码:

template<class T>
T* castAndCheck(const XmlLibObjectWrapper* pObjWrap)
{
  T* result = (T*)(pObjWrap->EngineObj);

#ifdef _CPPRTTI
  const type_info& ti = typeid(*result);
  const type_info& tiExpected = typeid(T);

  if (ti != tiExpected)
  {
    // I want it throw bad_cast here BUT IT DOES NOT!...
    //T& resultSpecific = dynamic_cast<T&>(*result); //<- this has the same problem
    T* resultSpecific = dynamic_cast<T*>(result);

    if (resultSpecific == …
Run Code Online (Sandbox Code Playgroud)

c++

-5
推荐指数
1
解决办法
117
查看次数

标签 统计

c++ ×1

crash-dumps ×1

dump ×1

pdb ×1

service ×1

svnserve ×1

windbg ×1

windows ×1