我们的夜间构建过程已经被打破了很长时间,因此它生成的PDB文件的年龄与相应的图像文件相差几个小时.我已经解决了这个问题.
但是,我想开始使用符号服务器,但不能因为必须使用这些年龄不匹配的pdb文件.我通过在windbg中使用.symopt + 0x40方法解决此问题.这意味着我必须手工组织我的所有pdb文件,经过多年的发布后,这就相加了.
我正在寻找一种方法来修改windbg用于标记pdb年龄的机制,并强制它匹配我的图像文件.实用程序ChkMatch执行类似的操作,但是对于pdb签名.开发人员在页面上声明"ChkMatch能够使可执行文件和PDB文件匹配,如果他们有不同的签名但年龄相同(有关PDB签名和年龄的更多信息,请参阅此文章).如果年龄不同,该工具无法生成文件匹配."
我看了一下hexeditor,甚至找到了与年龄相对应的东西,但它必须在内部拉出一些技巧,因为我无法让它工作.
有任何想法吗?
编辑:我不知道这是否有帮助,但在我的特殊情况下,年龄差异是由于不必要地重新连接dll引起的,这也会重新创建PDB文件.但是,我们的构建过程是存储原始dll(在重新链接之前),以及重新链接之后的pdb.我想过以某种方式手工重建这种情况.意思是,强制重新链接DLL,但在两种情况下都保存了pdb.然后我可以对这两个文件进行二进制比较,看看它们是如何变化的.也许运行某种自动执行此操作的修补软件?通过查看我的控制案例中究竟发生了哪些变化,或许我可以对我公司构建过程中保存的DLL和PDB做同样的事情?
编辑:我想出来!!!! 感谢第一个答案的评论之一,我查看了"未记载的Windows 2000 Secrets:A Programmers Cookbook"一书的pdf链接.作者详细介绍了pdb文件格式.正如我之前所说的那样,我已经将pdb加载到十六进制编辑器中,然后翻出一些看起来我的年龄/签名匹配,但它没有用.好吧,在使用W2k秘密书中的实用程序将pdb"爆炸"到包含的流中之后,我发现它们隐藏了对流3中年龄的另一个引用!!!!!!! 一旦我翻过那个,它在windbg中匹配.这太棒了!!!! 非常感谢....这里的符号服务器我来了!
我想将DAG表示为JSON文本,并想知道是否有人尝试过此以及他们处理的有关验证JSON是否实际上是DAG的任何问题.
我一直在调试一个Python程序,它在收到KeyboardInterrupt异常后会出现段错误.这通常是通过Ctrl+C从外壳按下来完成的.为了测试特定代码更改是否修复了错误,我有一个小的shell脚本,SIGINT在启动后随机时间发送到程序.我Ctrl+C遇到的问题是发送似乎对程序的影响不同于发送信号SIGINT,因此不会导致错误出现,所以我很想知道这两个动作之间的区别是什么.
该程序根本不捕获任何键盘操作,并且只是一个包含一些线程/进程的python程序.它不安装任何信号处理程序(虽然Python确实如此),并stty -a给出intr = ^C.我怀疑它可能是Ctrl+C发送SIGINT到所有子进程/线程而kill -INT只发送到主进程,但这是我的怀疑.
这是发送的shell脚本kill -INT.
wait
while :; do
seconds="$(python -c 'import random; print random.random()*4')"
./mandos --debug --configdir=confdir \
--statedir=statedir --no-restore --no-dbus &
pid=$!
{ sleep $seconds; kill -INT $pid; } &
fg %./mandos
status=$?
if [ $status -gt 1 ]; then
echo "Failed exit $status after $seconds seconds"
break
fi
wait
done
Run Code Online (Sandbox Code Playgroud) 是否存在将.NET PDB文件保留在真实服务器上的安全问题?
我知道抛出异常可能需要更长时间,但是在正常执行期间谁抛出异常呢?:-)
但从安全角度来看?任何问题?
如果我的文件是逗号分隔值,我如何从文件中读取数据
1, 2, 3, 4, 5\n
6, 7, 8, 9, 10\n
\n
Run Code Online (Sandbox Code Playgroud)
在读完文件后,我想将数据写回到上面相同格式的其他文件中.
我可以使用获得总行数
string line;
while(!file.eof()){
getline(file,line);
numlines++;
}
numline--; // remove the last empty line
Run Code Online (Sandbox Code Playgroud)
但我怎么知道一行/一行的总位数?
我还有一些存储数据的向量.所以,我想读取第一行,然后计算该行中元素的总数,这里是5(1,2,3,4,5)并将它们存储在数组/向量中,然后读取下一行并将它们存储在向量中再等等,直到我到达EOF.
然后,我想将数据写入文件,我想这将完成将数据写入文件的工作,
numOfCols=1;
for(int i = 0; i < vector.size(); i++)
{
file << vector.at(i);
if((numOfCols<5) file << ",";//print comma (,)
if((i+1)%5==0)
{
file << endl;//print newline after 5th value
numOfCols=1;//start from column 1 again, for the next line
}
numOfCols++;
}
file << endl;// last new line
Run Code Online (Sandbox Code Playgroud)
所以,我的主要问题是如何用逗号分隔值从文件中读取数据?
谢谢
如果我有一个DLL(在发布模式下构建)和相应的PDB文件,是否可以调试(步入)该DLL中包含的类/方法?
如果是,那么所需的步骤/配置是什么(例如,放置PDB文件的位置)?
编辑:
如果将PDB文件放在与DLL相同的位置(在简单控制台测试应用程序的bin/debug目录中).我可以看到DLL的符号被加载(在"输出"窗口中,也在"模块"窗口中),但我仍然无法进入该DLL的方法.
这可能是编译器优化的结果(正如Michael在他的回答中所描述的那样)?
添加DLL作为ASP.Net项目的引用时,VS2008会将多个文件添加到bin目录中.如果DLL被称为foo.dll,VS2008会添加foo.dll.refresh,foo.pdb和foo.xml.我知道foo.dll是什么:-),为什么VS2008会添加其他三个文件?这三个文件做了什么?我可以删除它们吗?是否需要在源代码管理中添加它们?
version-control intellisense .refresh visual-studio-2008 pdb-files
由于我无法访问我正在使用的库的完整源代码,但我确实有pdb文件,是否可以在"调试源代码"中设置断点?
如果是这样,我该怎么做?