我正在调试一个模块,我只有.exe和没有私有符号的.pdb.
在调试会话期间,我需要检查内部结构.显然这个结构不会出现在PDB中,因为它是私有的 - 但幸运的是我有一个.h文件,其中定义了这个结构.因此,我可以构建一些使用此结构的虚拟模块,并获取包含此结构的PDB文件.
现在我有一个带有struct符号的卸载模块,我想加载它的符号,以便为该结构转换一些内存.(当然没有卸载原始的.exe我正在调试)
问题:似乎WinDbg只允许为加载的模块加载符号......
我的问题是:有没有一种简单的方法可以从卸载的模块加载我的符号?
我试过.reload /i /f MyDll.dll
但我总是得到...MyDll.dll - unmatched
.
设置同情并没有帮助.
有任何想法吗?
在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)
所以这可能意味着项目文件依赖于自定义构建步骤输出.
我的问题是:
谢谢
CanonicalTrackedInputFiles Class
将文档称为" .read的文件跟踪日志解释器.以规范形式跟踪日志或已经生根(^)以使它们成为规范 "
当我有时间时我会深入研究它.也许这个类和Microsoft.Build.Utilities下的其他类可以用来帮助我们使用tlog文件,而不是直接使用原始文本tlog文件.
另请参阅:CanonicalTrackedOutputFiles Class
,FlatTrackingData Class
当然FileTracker Class
.
我有一个.net 4.0 WCF应用程序,它使用net.tcp绑定并实现一些服务.
我想为该绑定设置TCP套接字选项(ReuseAddress
选项.相关问题解释了我为什么要这样做).
如果我使用Raw Sockets,我可以使用Socket.SetSocketOption方法.
有没有办法以某种方式从net.tcp绑定中提取底层Raw Socket以更改其选项?或者其他一些设置此选项的方法?
有没有办法,最好没有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)似乎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
我需要在网络上比较许多文件(有些可能很大,有些可能很小).因此,我计划对每个客户端上的每个文件进行哈希处理,并仅通过网络发送哈希值.
这里的主要目标是表现.这意味着网络流量最小.安全不是问题.
还应该有"零"碰撞,因为我不想错误地认为两个不同的文件是相同的.这么说,我知道理论上总会发生碰撞,我只是希望实际上遇到它们的机会绝对可以忽略不计.
所以我的问题是:哪个.net哈希函数最适合这个任务?
我正在考虑使用缓冲读卡器MD5CryptoServiceProvider
(因为CNG可能并非在所有客户端都可用).
有没有办法获得比这更好的表现?(也许使用一些外部库?)
考虑以下简单示例:
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 的字段 。之后的下一个字段code
是place_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) 我在Visual Studio 2015上调试C++本机应用程序.
在断点停止后,我想知道当前目录.(它可能在执行期间在停止该断点之前发生了变化).
在.NET调试中,可以通过即时窗口进行调试.调试C++本机应用程序时,这不起作用.
为了说清楚 - 我不想再次更改和构建我的代码.我想在调试器中找到它(监视窗口,命令/立即窗口等)
c++ debugging immediate-window visual-studio visual-studio-2015
我有一个.net 4.0 WCF应用程序,它在net.tcp端口667上进行侦听.(Windows 7机器)
某些时候,应用程序会以非正常方式退出(例如,用户会终止该进程).
现在发生一件奇怪的事情:港口仍然开放.当用户重新启动应用程序时,它无法侦听该端口,因为它已在使用中.
奇怪的是,即使拥有进程被杀死,操作系统也不会关闭端口,即使在几个小时后也没有.
以下是一些观察结果:
<non-existent>
,PID属于旧的(被杀死的)进程,状态是LISTENING
.本地地址是我的机器,该端口上有两个IPV4
和IPV6
监听器.netstat -a -b -n -o
所涉及的可执行文件时显示为System
和本地地址0.0.0.0
.其他信息与TcpView相同.我发现关闭该端口的唯一方法是系统重启...
我正在使用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].
任何的想法?