小编DXM*_*DXM的帖子

寻找调试棘手的Windows服务启动gremlin的想法

在过去的几个月里,我收到了QA关于我们的一项服务的报告.在使用WinDbg检查挂起转储时,每次我发现同样的事情:Loader锁定临界区被锁定但拥有线程无处可寻.由于线程已经消失并且我能看到的唯一跟踪是它留下的全局关键部分,我没有看到在线程线程上运行了什么代码,甚至是线程来自哪个DLL,它甚至可能不是我们的(即第三方供应商).

这个问题是非常零星的,在过去的6个月中,它看起来可能是野外自然发生的3-4次.所有其他时间,服务运行完美.所以这让我相信这是某种时机/竞争条件的事情.

最近,我决定自己去做这个.我设置了一个带有WinTask脚本的机器,该脚本不断启动/停止所述服务.好消息是,我可以在5-6小时内重现问题.

现在为下一部分:我如何隔离它?

这是我到目前为止所尝试的:

  1. 在gflags图像设置中使用"调试器"字段,以便在cdb启动时自动运行cdb下的服务.到目前为止,这已经运行了两天而且从未挂起,因此我认为调试器引入了足够的时序更改以使问题不可见.

  2. 下载了应用程序验证程序并将进程配置为与之一起运行.找到一个完全不相关的错误,我们创建CComBSTR临时变量,将其分配给VARIANT并将变量传递给函数调用,即使CComBSTR长时间删除了分配的字符串.不要相信这个bug是相关的,因为string是只读的,并且它运行的线程不是那个正在死的线程.

我正在发帖子,以防你们想到我不考虑的事情.

我虽然有一个Windows实用程序人为地加载CPU并做了其他事情以使竞争条件弹出,我认为应用程序验证程序做了这样的事情,但显然它没有.有谁知道我正在采取什么,或者我只是梦想了吗?

除非在周末发生某些事情,否则我的下一步将是禁用所有调试器,返回库存并破解其中一个DllMains以记录THREAD_ATTACH/THREAD_DETACH事件.至少我能够拦截创建时死亡的线程.这可能会有所启发.

c++ debugging multithreading windbg

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

将Gitlab与ReviewBoard集成 - 文件Blob与提交SHA1

我正在尝试将我们公司一直使用的Gitlab服务器与新的ReviewBoard服务器集成.从我读过的有关ReviewBoard设置的所有内容来看,集成类似git的存储库的最简单方法是使用"原始文件URL掩码"字段(如果存储库具有Web前端).

幸运的是,Gitlab似乎支持这样一个前端,甚至还有一个记录良好的公共API:https:/// api/v2/projects // repository/commits // blob?private_token =&filepath =

在ReviewBoard的存储库设置中,可以指定可用于从git服务器检索单个文件的自定义URL.此URL有两个占位符:

  • {filename} - 文件路径
  • {revision} - 文件blob的sha1

不幸的是,我已经了解到Gitlab的API期望提交的SHA1,而不是单个文件和ReviewBoard,据我所知,只发送单个文件的SHA1但不提交提交的SHA1

  1. 有没有人成功地将Gitlab与ReviewBoard集成在一起?如果是这样,我有兴趣听到它
  2. 是否有人知道Gitlab支持的另一个可能未记录的API调用,它允许我们根据文件blob的SHA1检索文件?
  3. 是否有人知道ReviewBoard中的设置强制它传递提交的SHA1而不是文件blob?

git review-board gitlab

9
推荐指数
2
解决办法
4840
查看次数

Boost Pool的自由效率是O(n)还是O(1)

最近我发现了Boos Pool库,并开始根据我的代码进行调整.库提到它缺少的一件事是一个基类,它将覆盖任何类的new/delete操作符并使用池进行内存管理.我编写了自己的实现,并使用了一些元模板编程,它实际上看起来非常不错(通过简单地从基类派生,支持大小在1到1024字节之间的任何类)

我提到了那些东西,因为到目前为止,这真的非常酷,令人兴奋,然后我从Boost邮件列表中找到了这篇文章.看起来有些人真正打击了Pool库,特别指出了free()方法的低效率,他们说这些方法在O(n)时间运行.我逐步完成了代码,发现这是该方法的实现:

void free(void * const chunk)
{
  nextof(chunk) = first;
  first = chunk;
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这看起来像O(1),我真的没有看到他们所说的低效率.我注意到的一件事是,如果你使用的是singleton_pool的多个实例(即不同的标签和/或分配大小),它们都共享相同的互斥锁(关键部分更精确),这可以稍微优化一下.但是如果你使用常规堆操作,他们会使用相同的同步形式.

那么其他人是否认为Pool库效率低下且过时了?

c++ malloc optimization boost memory-management

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