小编Dro*_*ari的帖子

矮人错误:编译单元标题中的版本错误(为4,应为2)

共享对象是在RedHat Linux上构建的,虽然所有代码都是使用debug编译的,但调试器(gdb)拒绝加载符号并发出错误,如下所示:

...
GNU gdb   Fedora (6.8-37.el5) 
...
This GDB was configured as "x86_64-redhat-linux-gnu"...
Dwarf Error: wrong version in compilation unit header (is 4, should be 2) [in module libgrokf.so]
Run Code Online (Sandbox Code Playgroud)

有了这个错误,我无法在任何函数中触发断点,也看不到正确的堆栈跟踪.我重新编译了整个项目,但没有任何帮助.我知道在过去的某个时间调试该模块没有问题.

是什么导致了这个问题?

gdb dwarf

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

为什么Visual Studio 2010中的ssize_t被定义为unsigned?

我有一个可移植的程序,它假设它是有符号整数,使用ssize_t.从概念上讲,它的确如下:

#include <stdint.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    size_t size_10 = 10;
    size_t size_20 = 20;
    ssize_t len_diff;
    len_diff = (ssize_t)size_10 - (ssize_t)size_20;
    if (len_diff < 0)
        printf("negative\n");
    else if (len_diff > 0)
        printf("positive\n");
    else
        printf("zero\n");
}
Run Code Online (Sandbox Code Playgroud)

人们会期望该程序打印"负面",而是打印"正面".原因很容易从ssize_t的定义中看到(在sourceannotations.h中):

#ifndef _SSIZE_T_DEFINED
#ifdef  _WIN64
typedef unsigned __int64    ssize_t;
#else
typedef _W64 unsigned int   ssize_t;
#endif
#define _SSIZE_T_DEFINED
#endif
Run Code Online (Sandbox Code Playgroud)

因此,减去两个无符号值会导致无符号值,从而得到结果.

在旧版本的Windows SDK(例如V7.0A)中,ssize_t被正确定义为:

//
// SIZE_T used for counts or ranges which need to span the range of
// of a …
Run Code Online (Sandbox Code Playgroud)

c windows types

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

如何在Windows批处理文件中嵌入文本文件

我需要创建一个写入文本文件的批处理文件(可能包括变量)。在带有bash的Unix中,这很简单:

#!/bin/bash
ver="1.2.3"
cat > file.txt <<EOL
line 1, ${ver}
line 2 
line 3
... 
EOL
Run Code Online (Sandbox Code Playgroud)

用批处理文件执行此操作的最简单方法是什么?

注意:对于Windows批处理,有一个完整的解决方案在Heredoc上使用'heredoc'例程吗?但是对于临时使用来说似乎太复杂了。我正在寻找一种快速简单的方法。

windows batch-file

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

Process Explorer 报告的异常巨大的进程虚拟内存大小

寻找内存泄漏我最近注意到进程资源管理器(Microsoft/Sysinternals v16.26 的 procexp.exe)报告的虚拟内存值非常高 - 大约 2.1TB,其中我的笔记本电脑有 32GB RAM 运行 Win10Pro X64。例如,它报告 Chrome.exe 进程的虚拟内存大小为 2,151,819,136 KB。知道是什么原因造成的吗?

在此处输入图片说明

memory windows sysinternals

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

如何避免.NET RegEx类中的无限循环?

获得一个简单的任务来获取XPath表达式并返回一个与(可能)选择的节点的父节点匹配的前缀.

例:

/aaa/bbb       =>   /aaa
/aaa/bbb/ccc   =>   /aaa/bbb
/aaa/bbb/ccc[@x='1' and @y="/aaa[name='z']"] => /aaa/bbb
Run Code Online (Sandbox Code Playgroud)

因为方括号内的模式可能包含引号内的括号,所以我决定尝试使用正则表达式来实现这一点.这是一段代码片段:

string input =
    "/aaa/bbb/ccc[@x='1' and @y=\"/aaa[name='z'] \"]";
                                            //  ^-- remove space for no loop
string pattern = @"/[a-zA-Z0-9]+(\[([^]]*(]"")?)+])?$";

System.Text.RegularExpressions.Regex re =
    new System.Text.RegularExpressions.Regex(pattern);
bool ismatch = re.IsMatch(input); // <== Infinite loop in here
// some code based on the match
Run Code Online (Sandbox Code Playgroud)

因为模式是相当规则的,我寻找'/'后面跟着一个标识符,然后是一个在字符串末尾匹配的可选组(....)?$

代码似乎工作但输入字符串的不同值,我发现通过简单地插入一个空格(在注释中显示的位置),.NET IsMatch函数进入一个无限循环,获取它获得的所有CPU .

现在无论这个正则表达式模式是否是最好的(我有更复杂但简化它来显示问题),这似乎表明使用RegEx与任何不重要的事情可能是非常危险的.

我错过了什么吗?有没有办法防止正则表达式匹配中的无限循环?

.net regex infinite-loop

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

标签 统计

windows ×3

.net ×1

batch-file ×1

c ×1

dwarf ×1

gdb ×1

infinite-loop ×1

memory ×1

regex ×1

sysinternals ×1

types ×1