小编rps*_*rps的帖子

如何在多线程程序上启用反向调试?

我正在尝试在多线程项目(使用libevent)上使用gdb 7.3.1的反向调试功能,但是我收到以下错误:

(gdb) reverse-step
Target multi-thread does not support this command.
Run Code Online (Sandbox Code Playgroud)

这个问题,我想也许加载libthread_db是一个问题但是,当我运行程序时,gdb说:

Starting program: /home/robb/slug/slug 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
Run Code Online (Sandbox Code Playgroud)

如何在多线程项目中使用gdb 7.3.1启用反向调试?可能吗?

multithreading gdb reverse-debugging

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

如何使用sys/queue.h中的列表?

目前,我已经实现了一个单链表,如下所示:

struct PeerNode {
     struct Peer* cargo;
     struct PeerNode* next;
};
Run Code Online (Sandbox Code Playgroud)

...我有一个包含几个链接列表的结构,如下所示:

struct Torrent {
     ...
     struct PeerNode* peer_list;
     struct PeerNode* unchoked_peers;
     ...
}
Run Code Online (Sandbox Code Playgroud)

我想通过使用提供的宏来替换它sys/queue.h.我知道我可以用这样的代码替换我的代码:

struct Torrent {
     ...
     LIST_ENTRY(PeerNode, Peer) peer_list;
     struct PeerNode* unchoked_peers;
     ...
}
Run Code Online (Sandbox Code Playgroud)

然后,通过查看man queue,我相信我会通过这样做来初始化列表:

LIST_INIT(&peer_list);
LIST_INIT(unchoked_peers);
Run Code Online (Sandbox Code Playgroud)

但是,我不明白如何LIST_ENTRY使用列表的因素.从man页面上,它说:"宏LIST_ENTRY声明了一个连接列表中元素的结构,"但我真的不明白这意味着什么.

为什么我要声明一个结构来连接列表中的元素?不应该通过指针将每个节点连接到下一个节点,就像我的初始链表实现一样?如何用我提供的实现替换我的链表sys/queue.h?如何在列表中插入元素?

c linux bsd list

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

如何从Ruby中的字符串中去除括号?

我有一个字符串,像这样:

"yellow-corn-(corn-on-the-cob)"
Run Code Online (Sandbox Code Playgroud)

我想从字符串中删除括号,得到这样的东西:

"yellow-corn-corn-on-the-cob"
Run Code Online (Sandbox Code Playgroud)

我相信你会用gsub来完成这个,但我不确定我需要哪种模式来匹配括号.就像是:

clean_string = old_string.gsub(PATTERN,"")
Run Code Online (Sandbox Code Playgroud)

ruby regex string

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

有没有更好的方法来计算文件中所有符号的频率?

好的,所以,我说有一个文本文件(不一定包含所有可能的符号),我想计算每个符号的频率,并且在计算频率之后,我需要从最常见的频率访问每个符号及其频率至少频繁.符号不一定是ASCII字符,它们可以是任意字节序列,尽管长度相同.

我正在考虑做这样的事情(伪代码):

function add_to_heap (symbol)
    freq = heap.find(symbol).frequency
    if (freq.exists? == true)
        freq++
    else
        symbol.freq = 1
        heap.insert(symbol)

MaxBinaryHeap heap
while somefile != EOF
    symbol = read_byte(somefile)
    heap.add_to_heap(symbol)
heap.sort_by_frequency()

while heap.root != empty
    root = heap.extract_root()
    do_stuff(root)
Run Code Online (Sandbox Code Playgroud)

我想知道:有没有更好,更简单的方法来计算和存储文件中每个符号出现的次数?

algorithm pseudocode binary-heap

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

为什么会泄漏内存?

我有一个函数,当被调用时,struct Pieces*从a 获取一个字段struct Torrent并根据char数组中包含的信息对其进行初始化.

这是函数调用的样子(metadata.c:230):

get_pieces(t.pieces, &t.num_pieces, data);
Run Code Online (Sandbox Code Playgroud)

get_pieces()函数中,我初始化t.pieces,就像这样(metadata.c:65):

pieces = calloc(*num_pieces, sizeof(struct Piece));
Run Code Online (Sandbox Code Playgroud)

但是,当我运行valgrind时,它说:

==8701== 76,776 bytes in 1 blocks are definitely lost in loss record 634 of 634
==8701==    at 0x4C28349: calloc (vg_replace_malloc.c:467)
==8701==    by 0x4025A4: get_pieces (metadata.c:65)
==8701==    by 0x402CDB: init_torrent (metadata.c:230)
==8701==    by 0x404018: start_torrent (torrent.c:35)
==8701==    by 0x40232E: main (main.c:17)
Run Code Online (Sandbox Code Playgroud)

即使指针t->pieces仍在我的程序终止时仍可用,并且可以免费使用.为什么会泄漏内存?

完整的源代码可以在https://github.com/robertseaton/slug上找到.

c memory valgrind memory-leaks

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

导致此链接失败的原因(未定义的引用)?

我刚刚将我的开发机器从Gentoo切换到Arch Linux,当我尝试编译我的项目的新版本时,链接失败:

clang -O0 -g -pipe -Wall -DDEBUG -o slug announce.o bitfield.o main.o metadata.o network.o parser.o peer.o piece.o scheduler.o torrent.o url.o util.o -I. -lssl -lm -lcurl -levent
/usr/bin/ld.gold: metadata.o: in function get_info_hash:metadata.c:186: error: undefined reference to 'SHA1_Init'
/usr/bin/ld.gold: metadata.o: in function get_info_hash:metadata.c:187: error: undefined reference to 'SHA1_Update'
/usr/bin/ld.gold: metadata.o: in function get_info_hash:metadata.c:188: error: undefined reference to 'SHA1_Final'
/usr/bin/ld.gold: piece.o: in function verify_piece:piece.c:40: error: undefined reference to 'SHA1_Init'
/usr/bin/ld.gold: piece.o: in function verify_piece:piece.c:41: error: undefined reference to 'SHA1_Update'
/usr/bin/ld.gold: piece.o: in …
Run Code Online (Sandbox Code Playgroud)

c linux linker ld

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

如何设置HTML/CSS中某些文本的子集?

目前,我正在做这样的事情:

<h2><div class='q'>Q:</div> Does alfredo sauce contain soy?</h2>
Run Code Online (Sandbox Code Playgroud)

然后在我的CSS文件中设置样式,如下所示:

.q {
    padding-bottom: 15px;
    display: inline;
    font-size: 35px;
    font-weight: 700;
    color: #65A6D1;
}
Run Code Online (Sandbox Code Playgroud)

虽然这在我的浏览器中显示正常,但在通过http://validator.w3.org运行页面时,它会抱怨:"在此上下文中,元素div不允许作为元素h2的子元素.(从此子树中抑制更多错误.)"

如何在有效的HTML/CSS中设置这段文字的样式?

html css w3c-validation

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