问题的简短版本: 如何让gdb使用libc的调试符号?
更长版本: 我正在使用gdb调试程序,我想查看有关libc使用的futex的信息.但是,在调试期间的某个时刻,我得到的输出如下:
Catchpoint 2 (call to syscall futex), 0x00007ffff772b73e in ?? () from /lib/libc.so.6
(gdb) bt
#0 0x00007ffff772b73e in ?? () from /lib/libc.so.6
#1 0x00007ffff767fb90 in ?? () from /lib/libc.so.6
#2 0x00007ffff767a4c0 in vfprintf () from /lib/libc.so.6
#3 0x00007ffff768565a in printf () from /lib/libc.so.6
....
Run Code Online (Sandbox Code Playgroud)
当我info sharedlibrary在断点处运行gdb时,我看到:
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0x00007ffff7dddaf0 0x00007ffff7df6704 Yes (*) /lib64/ld-linux-x86-64.so.2
0x00007ffff7bc53e0 0x00007ffff7bd1388 Yes (*) /lib/libpthread.so.0
0x00007ffff79ba190 0x00007ffff79bd7d8 Yes (*) /lib/librt.so.1
0x00007ffff76538c0 0x00007ffff7766c60 Yes (*) …Run Code Online (Sandbox Code Playgroud) 有没有办法在Swift中创建一个工作线程?例如,如果有一个主要功能需要大量的计算,从而导致主线程延迟几秒钟,如果我想将该功能移动到一个单独的线程或不阻塞主线程的线程有没有办法用Swift做?
我已经浏览了Swift的Apple文档的基本和高级组件,但没有关于并发或并行的内容,有人知道如何做(如果可能的话)吗?
在C++中创建模板函数时,有一种简单的方法可以将模板的类型名称表示为字符串吗?我有一个简单的测试用例来展示我正在尝试做的事情(注意显示的代码不能编译):
#include <stdio.h>
template <typename type>
type print(type *addr)
{
printf("type is: %s",type);
}
int main()
{
int a;
print(&a);
}
// Would like to print something like:
// type is: int
Run Code Online (Sandbox Code Playgroud)
我认为在实例化函数时,typename应该在编译时可用,但我不熟悉模板,我还没有看到将typename作为字符串的方法.
我想这样做的原因是一些printf类型的调试.我有多个线程正在运行,并通过gdb逐步更改程序行为.所以对于某些事情,我想转储有关正在执行哪些函数的信息.这不是太重要,所以如果解决方案过于复杂,我会跳过将此信息添加到我的日志记录功能中.但如果有一种简单的方法可以做到这一点,那将是有用的信息.
我一直在用strace跟踪一个进程,并看到如下条目:
futex(0x7ffff79b3e00, FUTEX_WAKE_PRIVATE, 1) = 1
futex(0x7ffff79b3e00, FUTEX_WAIT_PRIVATE, 2, NULL) = 0
Run Code Online (Sandbox Code Playgroud)
但是,当我查看futex的手册页时,我只看到了诸如FUTEX_WAIT和的条目FUTEX_WAKE.所以我的问题是_PRIVATE,在我的strace输出中,这些名称的末尾附加了什么?例如FUTEX_WAKE,在futex手册页中记录的内容和FUTEX_WAKE_PRIVATE我在strace输出中看到的内容之间是否存在任何差异,或者当我试图了解正在调试的程序时发生的情况时,我可以假设它们是相同的.
我试图在WordPress网站上启用调试来调试插件.我读到了WP_DEBUG设置,并将以下内容添加到我的wp-config.php文件中:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Run Code Online (Sandbox Code Playgroud)
我的理解是我应该debug.log在我的wp-content目录中看到一个文件.我还没有看到任何东西,但我不知道是否因为没有记录任何错误,或者需要重新启动某些设置才能使这些设置生效.所以我的问题是什么时候wp-config.php读取设置,我需要重新启动任何服务才能使更改生效.
我想将相同的.cpp源文件编译成两个不同的目标可执行文件,我正在使用cmake.一个将有一些仪器代码而另一个不会.这样我就可以比较仪器的开销.
我用#ifdefs分隔了检测代码,所以我想使用-D标志定义一个值.我看到这是可能的
add_definitions(-DINSTRUMENT)
Run Code Online (Sandbox Code Playgroud)
但看起来这适用于该目录中创建的所有可执行文件.我想知道是否有一种很好的方法只为特定的可执行目标设置定义.
简短的问题:如何_在gnuplot中从变量名中分配的gnuplot中显示(下划线)字符?
细节:我有类似下面的代码:
items = "foo_abc foo_bcd bar_def"
do for [item in items] {
set title item
set output item.eps
plot item."-input.txt" using 1:2 title item with linespoints
}
Run Code Online (Sandbox Code Playgroud)
除了标题从foo_abc更改为foo a bc 之外,这对gnuplot工作正常.我不知道是否要使用转义字符,因为我不希望它在文件名中.我尝试了几种不同的选择,单引号和双引号,但我还没找到我需要的东西.
对于我的学士论文,我必须评估多核系统的常见问题.
在一些书中,我读到了关于虚假共享的内容以及其他有关缓存行乒乓的书籍.具体问题听起来很熟悉,这些问题是否同样存在,但还有其他名称?有人可以给我详细讨论这些主题的书名吗?(我已经有Darry Glove,Tanenbaum的文献......)
caching multicore processor computer-architecture false-sharing
简介:volatile在C和C++中应用于函数声明时关键字的作用是什么?
细节:
我看到可以编译一个标记为的函数volatile.但是,我不确定这会阻止什么编译器优化(如果有的话).例如,我创建了以下测试用例:
volatile int foo() {
return 1;
}
int main() {
int total = 0;
int i = 0;
for(i = 0; i < 100; i++) {
total += foo();
}
return total;
}
Run Code Online (Sandbox Code Playgroud)
当我编译时clang -emit-llvm -S -O3 test.c(gcc也可以工作,但在我看来llvm IR更具可读性)我得到:
target triple = "x86_64-unknown-linux-gnu"
define i32 @foo() #0 {
ret i32 1
}
define i32 @main() #0 {
ret i32 100
}
Run Code Online (Sandbox Code Playgroud)
很明显,编译器能够优化掉函数调用,foo()以便main()返回一个常量,即使foo()标记为volatile …
是否可以在CMake中添加外部项目,但是将其从all构建目标中排除?
我看过EXCLUDE_FROM_ALL使用的选项,ADD_EXECUTABLE但我不认为这适用于外部项目.
或者,如果我可以更改CMake的默认目标,我会很高兴,但我认为这是硬编码的all.
对于我正在研究的项目,我使用CMake生成Unix Makefile,现在我正在使用CMake版本2.8.10.2.