使用GMock,我如何验证是否调用了类的析构函数?有没有办法,除了把它包装在另一个班级?
明显的方法,EXPECT_CALL(object, ~classtype())
产生编译器错误(gmock不能产生一个调用的mock方法gmock_~classtype
).
我用C++编写了一个"危险"程序,它从一个堆栈帧到另一个堆栈帧来回跳转.目标是从调用堆栈的最低级别跳转到调用者,执行某些操作,然后再次跳回,每次跳过中间的所有调用.
我这样做是通过手动更改堆栈基地址(设置%ebp
)并跳转到标签地址.它完全有效,使用gcc和icc,没有任何堆栈损坏.这一天工作的日子很酷.
现在我正在使用相同的程序并在C中重写它,但它不起作用.具体来说,它不适用于gcc v4.0.1(Mac OS).一旦我跳转到新的堆栈帧(正确设置了堆栈基指针),就会在调用之前执行以下指令fprintf
.此处列出的最后一条指令崩溃,解除引用NULL:
lea 0x18b8(%ebx), %eax
mov (%eax), %eax
mov (%eax), %eax
Run Code Online (Sandbox Code Playgroud)
我做了一些调试,我已经想通过%ebx
在切换堆栈帧时手动设置寄存器(使用我在离开函数之前观察到的值),我修复了错误.我已经读过这个寄存器处理gcc中的"位置无关代码".
什么是位置无关代码?位置无关代码如何工作?这个寄存器指向什么?
我正在编写一个Ruby扩展,我有一个标准的mkmf配置脚本,但我需要--std=c++0x
在所有C++编译步骤中添加一个特殊的include flag().我不希望它在C编译步骤中,因为它会抛出警告.我该怎么做?
require 'mkmf'
create_makefile('thing')
Run Code Online (Sandbox Code Playgroud)
例如,我尝试过$CXXFLAGS << '-I..'
,但CXXFLAGS尚未定义.如果我使用$CXXFLAGS = '-I..'
它,它稍后会被覆盖.
关于C/C++中线程的问题......
C++ 0x语法
#include <thread>
void dummy() {}
int main(int, char*[]) {
std::thread x(dummy);
std::thread y(dummy);
...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有多少线程?两个(x和y)或三个(x,y和main)?我可以打电话给this_thread::yield()
主?我this_thread::get_id()
在主要电话中得到什么?
pthread语法
#include <pthread.h>
void dummy() {}
int main(int, char*[]) {
pthread_t x, y;
pthread_create(&x, NULL, &dummy, NULL);
pthread_create(&y, NULL, &dummy, NULL);
...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有多少线程?两个(x和y)或三个(x,y和main)?我可以打电话给pthread_yield()
主?我pthread_self()
在主要电话中得到什么?
提升语法
#include <boost/thread>
void dummy() {}
int main(int, char*[]) {
boost::thread x(dummy);
boost::thread y(dummy);
...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有多少线程?两个(x和y)或三个(x,y和main)?我可以打电话给boost::this_thread::yield()
主?我boost::this_thread::get_id()
在主要电话中得到什么?
有没有办法ld
在Mac OS X上使用链接描述文件?
ld
Linux上的GNU 程序接受一个-T <scriptname>
选项,但在Mac OS -T上是一个未知的命令选项.如果可以解决问题的话,使用GCC的替代安装是可以的.
来自Ruby世界,我们拥有美丽的状态机框架,就像最近出现在Rails中的框架一样,我很惊讶在Python中找不到具有相似美感的明显候选人.我想避免自己动手; 面向对象的状态机设计通常要求您在每次添加状态时吊起一堆python(在这种情况下我会经常这样做).
我应该在Python代码中使用的状态机的框架是什么?在进行任何性能或其他考虑之前,我想要最优雅的代码.
两相结构具有以下形状:
struct something {
something ()
: p1(NULL)
, p2(NULL)
{ }
~something () {
if (p1) delete p1;
if (p2) delete p2;
}
void initialize () {
p1 = new int(2);
p2 = new int(5); // May throw if allocation fails!
}
int* p1;
int* p2;
};
Run Code Online (Sandbox Code Playgroud)
其中一个天真的构造函数(不注意分配失败)将泄漏内存:从不调用部分构造的对象的析构函数.
我的问题:以下代码是安全的,并且通过证据,智能指针是否可以避免两阶段构造?
struct something {
something ()
: p1(new int(2))
, p2(new int(5))
{ }
std::unique_ptr<int> p1;
std::unique_ptr<int> p2;
};
Run Code Online (Sandbox Code Playgroud) 使用Visual Studio 2012 RC,我从该页面开始使用Azure Cloud Service.我选择了MVC 4,包括一个测试项目,并在构建时启用了NuGet包恢复.
当我部署这蔚蓝的网站,使用Git,似乎目标框不包括任何的WindowsAzure.Diagnostics
或在WindowsAzure.ServiceRuntime
图书馆.我一般都是.NET新手,但我无法想象我在这里缺少什么.此外,虽然我可以从参考中删除诊断(没有诊断,没有问题),但似乎我不能对ServiceRuntime做同样的事情.
我做错了什么,或者这是Azure网站中的错误?它可以修复吗?
C:\... [master]> git push azure master
Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (12/12), 216.47 KiB, done.
Total 12 (delta 5), reused 0 (delta 0)
remote: New deployment received.
remote: Updating branch 'master'.
remote: Preparing deployment for commit id '2cb9c59bd0'.
remote: Building web project 'MvcWebRole1.csproj'.
remote: ..
remote: Successfully installed 'Microsoft.AspNet.WebApi 4.0.20505.0'.
remote: Successfully …
Run Code Online (Sandbox Code Playgroud) 我有一个实验性的库,我试图测量它的性能.为此,我写了以下内容:
struct timeval begin;
gettimeofday(&begin, NULL);
{
// Experiment!
}
struct timeval end;
gettimeofday(&end, NULL);
// Print the time it took!
std::cout << "Time: " << 100000 * (end.tv_sec - begin.tv_sec) + (end.tv_usec - begin.tv_usec) << std::endl;
Run Code Online (Sandbox Code Playgroud)
偶尔,我的结果包括负面时间,其中一些是荒谬的.例如:
Time: 226762
Time: 220222
Time: 210883
Time: -688976
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?
这似乎在Rails社区常见的,至少,要成功应对POST
,PUT
或DELETE
通过重定向而不是返回成功的请求.例如,如果我PUT
对我的用户个人资料进行了合法更改,那么惯用的回复就是302 Redirect
个人资料页面.
这不对吗?我们不应该200 OK
从请求中返回吗?或者a 201 Created
,在POST
请求的情况下?无论如何,在HTTP/1.1状态定义中的任何一个都允许(或必须)包括响应.
我想我不知道,以前我去"修理"我的应用程序,是否存在有一个该死的好理由,为什么社会已经重定向,而不是成功响应的方式.
c++ ×6
c ×2
c++11 ×2
gcc ×2
.net ×1
assembly ×1
azure ×1
boost-thread ×1
c# ×1
constructor ×1
destructor ×1
gettimeofday ×1
googlemock ×1
http ×1
linker ×1
linux ×1
macos ×1
mocking ×1
pthreads ×1
python ×1
ruby ×1
timing ×1
unit-testing ×1
x86 ×1