小编Pee*_*oot的帖子

如何在gdb中转储所有XMM寄存器?

我可以使用以下命令转储gdb中的所有整数寄存器:

info registers
Run Code Online (Sandbox Code Playgroud)

对于xmm寄存器(英特尔)我需要一个文件,如:

print $xmm0
print $xmm1
...
print $xmm15
Run Code Online (Sandbox Code Playgroud)

然后获取该文件.有没有更简单的方法?

x86 gdb

11
推荐指数
3
解决办法
7939
查看次数

Mathematica积分评估只是显示为格式良好的文本?

尝试以下指数积分:

Integrate[  Exp[-2 A Sqrt[x^2 + a^2] + I ( x Subscript[k, x] + b )],
            {x, 0,   Infinity}
]
Run Code Online (Sandbox Code Playgroud)

我找回了一些非常印刷但没有评估过的东西?这是否意味着Mathematica无法执行积分并放弃?我没有看到任何消息说这是发生了什么.

为了提供这个问题的上下文,这是一个我用纸和笔完成的积分的一维版本:

\int d^3 r e^{ i \vec{k} \cdot \vec{r} } e^{ - 2 Z r/ a_0 }
Run Code Online (Sandbox Code Playgroud)

尝试mathematica的目的是看我是否可以验证我的结果:

16 \pi Z a_0^3/(4 Z^2 + k^2 a_0^2)^2
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

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

如何进行C++对齐的数组分配?

我想修改一个数组分配:

 float * a = new float[n] ;
Run Code Online (Sandbox Code Playgroud)

使用对齐的分配器。我倾向于尝试使用placement new 和posix_memalign(或新的c++11 等价物),但看到placement new with arrays 在数组分配方面存在问题,因为编译器可能需要为计数或其他元数据提供额外的存储空间

我试过:

int main()
{
   float * a = new alignas(16) float[3] ;

   a[2] = 0.0 ;

   return a[2] ;
}
Run Code Online (Sandbox Code Playgroud)

但编译器似乎表明 alignas 被忽略:

$ g++ -std=c++11 t.cc -Werror
t.cc: In function ‘int main()’:
t.cc:4:39: error: attribute ignored [-Werror=attributes]
    float * a = new alignas(16) float[3] ;
                                       ^
t.cc:4:39: note: an attribute that appertains to a type-specifier is ignored
Run Code Online (Sandbox Code Playgroud)

看起来使用 alignas …

c++ arrays alignment

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

是否有Windows等效的nanosleep?

Unix有各种睡眠API(睡眠,睡眠,纳米睡眠).我知道睡眠的唯一Win32功能是Sleep(),它以毫秒为单位.

我看到大多数睡眠,即使在Unix上,也会大幅度上升(即:通常为大约10ms).我在Solaris上看到过,如果你以root身份运行,你可以获得10毫秒以下的休眠时间,我知道如果启用了精细粒度计时器内核参数,这也可以在HPUX上运行.Windows上是否有更精细的粒度计时器?如果是,那么什么是API?

winapi

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

objdump和解析本地函数调用的链接?

如果我在(linux amd64).o文件上运行objdump -d,函数调用将显示,而不会完成链接时间分辨率.例:

  90:   66 89 44 24 1c          mov    %ax,0x1c(%rsp)
  95:   44 89 74 24 10          mov    %r14d,0x10(%rsp)
  9a:   e8 00 00 00 00          callq  9f <foo+0x9f>
  9f:   83 f8 ff                cmp    $0xffffffffffffffff,%eax
  a2:   74 5e                   je     102 <foo+0x102>
Run Code Online (Sandbox Code Playgroud)

函数中的一个分支正确显示,但callq只是为链接器输入的存根(有四个字节的零可供链接器放入正确的地址).

有没有一种方法,没有实际链接,以获得已解决函数名称的汇编列表?我不关心最终将使用的地址,只关心函数的名称.该信息必须位于.o文件中,因为链接器必须使用它来完成其工作.

我问,因为有问题的代码进入的共享库大约是140Mb,并且需要长时间才能运行objdump -d来获取asm转储,并将所有函数调用解析为实际名称.

linux objdump

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

删除perl脚本中的Windows符号链接?

假设我创建了一些Windows符号链接,如:

rd /s /q source withlink linkdir
mkdir source
mkdir withlink
echo blah > source/myfile
cd withlink
touch blah
mklink mylink ..\source\myfile
@REM mklink /d linkdir ..\source
cd ..
Run Code Online (Sandbox Code Playgroud)

我可以用shell删除包含符号链接的目录

rd /s /q withlink
Run Code Online (Sandbox Code Playgroud)

我在perl脚本中执行相同的任务,我们目前使用cygwin'rm -rf'.不幸的是我们正在使用cygwin 1.5并且rm和rm -rf在我想使用的符号链接上不能在该版本中正常工作(它们删除了符号链接内容而不是符号链接).

如果我尝试:

use File::Path qw( rmtree ) ;
rmtree( ['withlink'] ) ;
Run Code Online (Sandbox Code Playgroud)

这很好用,只要我没有任何目录符号链接(就像上面的create-the-links序列中的REM一样),然后perl的rmtree最终表现得像cygwin,我最终得到了目录内容我的原始目录已删除.

有没有人建议我可以使用备用perl递归目录删除方法.我想到了一个shell标注:

system("rd /s /q withlink") ;
Run Code Online (Sandbox Code Playgroud)

但这需要我测试平台并为Windows和Unix提供不同的perl代码.

编辑:请注意,与Unix不同,unlink()不能删除目录符号链接,至少使用perl v5.6.0,这是我们的构建系统当前使用的.但是,rmdir()确实可以删除Windows目录符号链接.

perl symlink

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

这个带输入=输出的gcc样式asm是否需要早期的破坏?

Gcc内联asm早期clobber约束在这里的gcc文档中描述:

http://gcc.gnu.org/onlinedocs/gcc/Modifiers.html#Modifiers

我们有128位add的amd64实现:

#define ADD128(rh, rl, ah, al, bh, bl)                                     \
    __asm__("addq %2, %0; adcq %3, %1"                                     \
            /* outputs */ : "=r"(rl),  /* %0 */                            \
                            "=r"(rh)   /* %1 */                            \
            /* inputs */  : "emr"(bl), /* %2 */                            \
                            "emr"(bh), /* %3 */                            \
                            "0"(al),   /* %4 == %0 */                      \
                            "1"(ah)    /* %5 == %1 */                      \
            /* clobbers */: "cc"       /* condition registers (CF, ...) */ \
           )
Run Code Online (Sandbox Code Playgroud)

我想知道这是否必须使用%0的早期clobber(&):

#define ADD128(rh, rl, ah, al, bh, bl) …
Run Code Online (Sandbox Code Playgroud)

gcc inline-assembly

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

如何在不破坏vtbl的情况下完成相当于memset(this,...)的操作?

我知道memset对class初始化不满意.例如,类似以下内容:

class X { public: 
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;
Run Code Online (Sandbox Code Playgroud)

vtbl如果virtual混合中有一个功能,它会破坏它.

我正在开发一个(巨大的)遗留代码库,它是C-ish但是用C++编译,因此所有成员都是POD,不需要传统的C++构造函数.C++的使用逐渐深入(比如虚函数),这就咬了开发人员没有意识到memset有这些额外的C++牙齿.

我想知道是否有一个C++安全的方法来进行初始的全部零初始化,然后可能会跟着特定的成员初始化,其中零初始化是不合适的?

在C++中找到了用于初始化的类似问题memset,并使用memset将派生结构归零.这两个都有"不使用memset()"答案,但没有好的替代方案(特别是对于可能包含许多成员的大型结构).

c++ initialization

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

stty hupcl ixon ixoff

stty, not a typewritter在hpux上看到消息(尽管有交互式终端检查?),我猜这些是由于我的.kshrc文件中的stty行:

case $- in
*i* )
    stty hupcl ixon ixoff
    stty erase '^?' kill '^U' intr '^C' eof '^D' susp '^Z'
;;
esac
Run Code Online (Sandbox Code Playgroud)

两个问题:

1)我知道擦除线为什么存在,因为没有它就没有退格.我继承了这些.kshrc行,但不知道他们做了什么.

有人知道hupcl ixon ixoff线的意义吗?stty手册页不是特别有启发性:

hupcl (-hupcl)           Hang up (do not hang up) modem connection on
                         last close.

ixon (-ixon)             Enable (disable) START/STOP output control.
                         Output is stopped by sending an ASCII DC3 and
                         started by sending an ASCII DC1.

ixoff (-ixoff)           Request that the system send (not send)
                         START/STOP characters when …
Run Code Online (Sandbox Code Playgroud)

ksh hp-ux tty

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

clang_complete的异步代码完成

最近我clang_complete用来做C++代码完成.这对于小程序来说是好的和快速的,但对于我的情况来说太慢了(我正在处理大型代码库,通常一个文件需要几秒钟来编译),即使我使用了libclang,它可以缓存一些已解析的结果以加速以后的解析,如果我理解正确的话.

目前clang_complete将阻止ClangComplete直到libclang完成解析.即使它启动了一个工作线程,主线程仍然会反复检查用户是否按下CTRLC或工作线程是否成功完成.在此期间,vim变得反应迟钝,从而使这个插件难以使用.

我想对这种行为做一些改进,例如,ClangComplete不会阻塞,但如果花费的时间超过0.2秒,则返回空结果,而线程仍然在运行.当libclang完成其解析,并且它检测到我仍然在输入相同的文字完成,它会弹出一个菜单完成.

这方面的困难是:

  1. 如何在当时弹出菜单,而不会在不同的线程之间造成一些微妙的竞争条件,
  2. 怎么知道我还在输入相同的完成字?我认为vim本身会跟踪这个,因为当我输入错误的内容时,例如,std::strang而不是std::string,我键入退格键以删除错误ang,完成菜单将再次显示.那么如何访问这个内部标志?

vim autocomplete clang-complete

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