好的,info break列出了断点,但是没有使用在这个问题中使用--command重用它们的格式.gdb是否有一种方法可以将它们转储到可接受输入的文件中?有时在调试会话中,有必要在构建一组断点进行测试后重新启动gdb.
编辑: .gdbinit文件与--command具有相同的问题.info break命令不列出命令,而是列出供人消费的表.
详细说明,这是一个来自info break的示例:
(gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x08048517 <foo::bar(void)+7>
gcc编译器的v4系列可以在一些现代CPU上使用SIMD处理器自动矢量化循环,例如AMD Athlon或Intel Pentium/Core芯片.这是怎么做到的?
好的,这是雷区,但试图理解为什么人们会选择.NET(或等效Mono)进行跨平台开发而不是其他工具包很难没有经验.
对于可能同时使用两者的程序员,会遗漏或期望哪些功能?相反,一个人的用户在范例或其他方面会发现什么?任何一个工具包都有很多要说的,但是使用这两个工具包的人的评论很有价值.
以下是有关该主题的一些相关问题:
编辑: 如果Windows是目标平台之一,使用Mono只是一个可行的选择吗?
有没有人真正使用过可逆调试器?谷歌出现的唯一产品是UndoDB.它显然仅适用于Linux.
在查看有关优化的一些问题时,对于最有效地使用优化器的编码实践问题,这个接受的答案激起了我的好奇心.断言是局部变量应该用于函数中的计算,而不是输出参数.有人建议这将允许编译器进行额外的优化,否则不可能.
因此,为示例Foo类编写一段简单的代码并使用g ++ v4.4和-O2编译代码片段会产生一些汇编器输出(使用-S).汇编程序列表的部分只包含如下所示的循环部分.在检查输出时,两个循环似乎几乎相同,只有一个地址不同.该地址是第一个示例的输出参数或第二个示例的局部变量的指针.
无论是否使用局部变量,实际效果似乎都没有变化.所以问题分为3部分:
a)即使给出提示,GCC也没有进行额外的优化;
b)GCC 在两种情况下都成功优化,但不应该;
c)GCC是否在两种情况下都成功优化,并且正在生成C++标准定义的兼容输出?
这是未经优化的功能:
void DoSomething(const Foo& foo1, const Foo* foo2, int numFoo, Foo& barOut)
{
for (int i=0; i<numFoo, i++)
{
barOut.munge(foo1, foo2[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
和相应的组装:
.L3:
movl (%esi), %eax
addl $1, %ebx
addl $4, %esi
movl %eax, 8(%esp)
movl (%edi), %eax
movl %eax, 4(%esp)
movl 20(%ebp), %eax ; Note address is that of the output argument
movl %eax, (%esp)
call _ZN3Foo5mungeES_S_
cmpl %ebx, 16(%ebp) …Run Code Online (Sandbox Code Playgroud) Java等语言明确使用interface关键字来表示接口.使用Java之后,这个概念似乎足以让我证明一个关键字可以强制执行这个概念.
当然,可以使用纯虚拟类并将其标记为接口.但是,这个关键字似乎非常有用,并且与纯虚拟类不同,因此非常有用.也许它被包含在C++ 0x中?
当指定了某些选项并给出了合适的条件时,GCC可以自动向量化循环.是否有广泛可用的其他编译器可以做同样的事情?
有没有人利用gcc可以做的自动矢量化?在现实世界中(与示例代码相对)?是否需要重组现有代码才能占用优势?在任何可以通过这种方式进行矢量化的生产代码中是否存在大量案例?
c++ ×5
gcc ×4
loops ×3
simd ×3
debugging ×2
gdb ×2
.net ×1
api ×1
breakpoints ×1
c ×1
coding-style ×1
const ×1
oop ×1
optimization ×1
qt ×1