小编Ami*_*nen的帖子

强制WinDbg加载卸载模块的符号

我正在调试一个模块,我只有.exe和没有私有符号的.pdb.
在调试会话期间,我需要检查内部结构.显然这个结构不会出现在PDB中,因为它是私有的 - 但幸运的是我有一个.h文件,其中定义了这个结构.因此,我可以构建一些使用此结构的虚拟模块,并获取包含此结构的PDB文件.

现在我有一个带有struct符号的卸载模块,我想加载它的符号,以便为该结构转换一些内存.(当然没有卸载原始的.exe我正在调试)
问题:似乎WinDbg只允许为加载的模块加载符号......

我的问题是:有没有一种简单的方法可以从卸载的模块加载我的符号?

我试过.reload /i /f MyDll.dll但我总是得到...MyDll.dll - unmatched.
设置同情并没有帮助.

有任何想法吗?

windbg

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

文件跟踪器日志文件格式

在Visual Studio 2010中,使用文件跟踪器(Microsoft.Build.Utilities.FileTracker)完成增量构建.它似乎负责在中间目录上创建这些*.1.tlog文件.

我找不到这些.tlog文件的语法参考.
它们包含在跟踪器跟踪某些工具的执行时读取/写入的文件的路径列表,以便检查应在增量构建中编译哪些文件.但是,这些文件还包含一些特殊字符,如"^"和"|".
我注意到的另一件事是这些文件有时是从Visual Studio目标文件编辑的.例如,在CustomBuildStep目标上的Microsoft.CppCommon.targets中,我找到以下行:

 <!-- Appended tlog to track custom build events -->
    <WriteLinesToFile File="$(IntDir)$(ProjectName).write.1.tlog" Lines="@(CustomBuildStep->'^%(Identity)');@(CustomBuildStep->MetaData('Outputs')->FullPath()->Distinct())"/>
Run Code Online (Sandbox Code Playgroud)

所以这可能意味着项目文件依赖于自定义构建步骤输出.

我的问题是:

  • 有没有人知道.tlog文件语法的参考?
  • 在哪些情况下Visual Studio上使用的跟踪器日志?我知道CL和可能使用它的链接任务,但似乎Visual Studio IDE本身使用它来决定是否为某个项目运行msbuild.

谢谢


编辑

另一个暗示:

CanonicalTrackedInputFiles Class将文档称为" .read的文件跟踪日志解释器.以规范形式跟踪日志或已经生根(^)以使它们成为规范 "
当我有时间时我会深入研究它.也许这个类和Microsoft.Build.Utilities下的其他类可以用来帮助我们使用tlog文件,而不是直接使用原始文本tlog文件.

另请参阅:CanonicalTrackedOutputFiles Class,FlatTrackingData Class当然FileTracker Class.

msbuild visual-studio-2010 incremental-build

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

在WCF net.tcp绑定上更改套接字选项

我有一个.net 4.0 WCF应用程序,它使用net.tcp绑定并实现一些服务.
我想为该绑定设置TCP套接字选项(ReuseAddress选项.相关问题解释了我为什么要这样做).
如果我使用Raw Sockets,我可以使用Socket.SetSocketOption方法.

有没有办法以某种方式从net.tcp绑定中提取底层Raw Socket以更改其选项?或者其他一些设置此选项的方法?

sockets wcf tcp .net-4.0

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

隐藏容器溢出时显示工具提示

有没有办法,最好没有js,在容器必须有的overflow:hidden情况下,在容器上方放置和显示工具提示,而工具提示不受容器影响和夹住?

这是一个例子来说明这个问题:

.container {
  overflow: hidden;
  position: relative;
  margin: auto;
  width: 50%;
  border: 3px solid green;
  padding: 10px;
  height: 70px;
  background: lightblue;
  text-align: center;
}
a.tooltips {
  position: relative;
  display: inline;
}
a.tooltips span {
  position: absolute;
  width: 140px;
  color: #FFFFFF;
  background: #000000;
  height: 96px;
  line-height: 96px;
  text-align: center;
  visibility: hidden;
  border-radius: 8px;
  box-shadow: 4px 3px 10px #800000;
}
a.tooltips span:after {
  content: '';
  position: absolute;
  bottom: 100%;
  left: 50%;
  margin-left: -8px;
  width: 0;
  height: 0;
  border-bottom: 8px …
Run Code Online (Sandbox Code Playgroud)

html css css3

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

gcc复数常数折叠

似乎gcc对复杂的常量折叠有一些限制.这是一个例子:

static inline unsigned int DJBHash(const char *str)
{
   int i;
   unsigned int hash = 5381;

   for(i = 0; i < strlen(str); i++)
   {
      hash = ((hash << 5) + hash) + str[i];   
   }

   return hash;
}

int f(void)
{   
    return DJBHash("01234567890123456");
}
Run Code Online (Sandbox Code Playgroud)

当使用-O3优化级别(gcc 4.8)运行时,它很好地展开了DJBHash中的循环,并在编译期间计算该字符串的哈希值.

但是,当使字符串长一个字符时,return DJBHash("012345678901234567");它不再折叠它并生成带有条件跳转指令的循环.

我想将任意长度的文字字符串折叠为其哈希值作为编译时常量.
这可以吗?

澄清

我的问题是关于gcc的常量折叠优化(请参阅标题 - 请不要删除gcc编译器标签)
这里的许多答案试图用模板或constexpr解决问题.很高兴知道这些选项,并感谢发布它们为所有人的利益.但是,他们没有直接回答我的问题.

实际上,我正在使用gcc端口,因此我可以根据需要更改和构建gcc源代码.但我只限于C,我想在这个范围内解决这个问题.

c compiler-construction gcc compiler-optimization constantfolding

9
推荐指数
3
解决办法
2276
查看次数

选择哈希函数以获得最佳性能

我需要在网络上比较许多文件(有些可能很大,有些可能很小).因此,我计划对每个客户端上的每个文件进行哈希处理,并仅通过网络发送哈希值.
这里的主要目标是表现.这意味着网络流量最小.安全不是问题.
还应该有"零"碰撞,因为我不想错误地认为两个不同的文件是相同的.这么说,我知道理论上总会发生碰撞,我只是希望实际上遇到它们的机会绝对可以忽略不计.

所以我的问题是:哪个.net哈希函数最适合这个任务?

我正在考虑使用缓冲读卡器MD5CryptoServiceProvider(因为CNG可能并非在所有客户端都可用).

有没有办法获得比这更好的表现?(也许使用一些外部库?)

.net hash .net-4.0

8
推荐指数
4
解决办法
8533
查看次数

允许 struct 字段溢出到下一个字段

考虑以下简单示例:

struct __attribute__ ((__packed__)) {
 int code[1];
 int place_holder[100];
} s;

void test(int n)
{
 int i;

 for (i = 0; i < n; i++) {
  s.code[i] = 1;
 }
}
Run Code Online (Sandbox Code Playgroud)

for 循环正在写入code大小为 1 的字段 。之后的下一个字段codeplace_holder
我希望在 的情况下n > 1,写入code数组会溢出并1写入place_holder.

但是,在使用-O2(在 gcc 4.9.4 上但也可能在其他版本上)进行编译时,会发生一些有趣的事情。
编译器识别出代码可能溢出数组code,并将循环展开限制为 1 次迭代

很容易看出,在编译-fdump-tree-all和查看最后一个树传递(“t.optimized”)时:


;; Function test (test, funcdef_no=0, decl_uid=1366, symbol_order=1)

Removing basic block …
Run Code Online (Sandbox Code Playgroud)

c gcc struct compiler-optimization loop-unrolling

8
推荐指数
2
解决办法
538
查看次数

在Visual Studio C++调试会话期间找出当前目录

我在Visual Studio 2015上调试C++本机应用程序.
在断点停止后,我想知道当前目录.(它可能在执行期间在停止该断点之前发生了变化).

在.NET调试中,可以通过即时窗口进行调试.调试C++本机应用程序时,这不起作用.

有没有办法在调试C++本机应用程序时找到当前目录?

为了说清楚 - 我不想再次更改和构建我的代码.我想在调试器中找到它(监视窗口,命令/立即窗口等)

c++ debugging immediate-window visual-studio visual-studio-2015

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

如何在退出拥有进程后释放"守护进程"TCP端口侦听器?

背景

我有一个.net 4.0 WCF应用程序,它在net.tcp端口667上进行侦听.(Windows 7机器)
某些时候,应用程序会以非正常方式退出(例如,用户会终止该进程).
现在发生一件奇怪的事情:港口仍然开放.当用户重新启动应用程序时,它无法侦听该端口,因为它已在使用中.

奇怪的是,即使拥有进程被杀死,操作系统也不会关闭端口,即使在几个小时后也没有.

以下是一些观察结果:

  • 在TcpView上进程是<non-existent>,PID属于旧的(被杀死的)进程,状态是LISTENING.本地地址是我的机器,该端口上有两个IPV4IPV6监听器.
  • TcpView上的"关闭连接"和"结束进程"操作对该端口没有影响.
  • Process Explorer不显示旧(已终止)进程.我试图搜索PID或端口但没有找到任何东西.
  • 运行netstat -a -b -n -o所涉及的可执行文件时显示为System 和本地地址0.0.0.0.其他信息与TcpView相同.

我发现关闭该端口的唯一方法是系统重启...

问题

  1. 有没有办法配置WCF net.tcp服务主机监听器,以避免在进程不正常后存在延迟?
  2. 有没有办法以编程方式关闭该端口?如果有,我的应用程序可以先尝试关闭该端口,然后再尝试收听它.
  3. 是否有可以关闭此类"守护程序"端口的实用程序?(因为TcpView无法做到这一点)
  4. 这是操作系统错误吗?操作系统是否应该跟踪这些"守护程序"监听器并在进程存在后关闭它们?

wcf tcp

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

如何在gdb中检查与其类型同名的变量

我正在使用gdb 7.4调试现有的C库
我正在尝试检查一个变量,遗憾的是,该变量的声明名称与其类型相同:

extern const enum rtx_class rtx_class[NUM_RTX_CODE];
Run Code Online (Sandbox Code Playgroud)

现在我找不到检查这个变量的方法.p rtx_class返回尝试使用类型名称作为表达式,与p &rtx_class和相同p rtx_class[0].
但是,info var rtx_class按预期工作并返回const rtx_class rtx_class [145].

任何的想法?

c debugging gcc gdb

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