所以我在StackOverflow和Google上浏览了搜索结果的页面和页面,我遇到了很少适合资源受限的嵌入式环境(例如ARM)的C/C++ HTTP客户端库.然而,我遇到了很多适合桌面级应用程序的东西.
从本质上讲,我使用简单,易用且方便的API来进行HTTP GET,POST和HEAD调用(支持身份验证,下载恢复和有效负载压缩).如果它具有较小的占用空间(即没有或最小的外部依赖性)并且是开源的(具有许可许可证),那将是理想的.
这是我到目前为止所遇到的一系列清单以及它们不适合的原因 -
那里有没有我不知道的图书馆,或者我最好自己滚动?
如何在Ruby中重置单个对象?我知道在真正的代码中我们永远不想这样做但是单元测试呢?
这是我在RSpec测试中尝试做的事情 -
describe MySingleton, "#not_initialised" do
it "raises an exception" do
expect {MySingleton.get_something}.to raise_error(RuntimeError)
end
end
Run Code Online (Sandbox Code Playgroud)
它失败是因为我之前的一个测试初始化了单例对象.我试过从这个链接开始关注Ian White的建议,它基本上是猴子补丁Singleton来提供reset_instance方法,但我得到一个未定义的方法'reset_instance'异常.
require 'singleton'
class <<Singleton
def included_with_reset(klass)
included_without_reset(klass)
class <<klass
def reset_instance
Singleton.send :__init__, self
self
end
end
end
alias_method :included_without_reset, :included
alias_method :included, :included_with_reset
end
describe MySingleton, "#not_initialised" do
it "raises an exception" do
MySingleton.reset_instance
expect {MySingleton.get_something}.to raise_error(RuntimeError)
end
end
Run Code Online (Sandbox Code Playgroud)
在Ruby中最常用的方法是什么?
假设我有两个浮点数,我想比较它们.如果一个大于另一个,程序应该采用一个分叉.如果情况恰恰相反,那么应采取另一条道路.并且它应该做同样的事情,如果被比较的值被轻微地推向一个方向,仍然应该比较真实.
这是一个难以解释的问题,所以我写这篇文章来证明它 -
float a = random();
float b = random(); // always returns a number (no infinity or NaNs)
if(a < b){
if( !(a < b + FLOAT_EPISILON) ) launchTheMissiles();
buildHospitals();
}else if(a >= b){
if( !(a >= b - FLOAT_EPISILON) ) launchTheMissiles();
buildOrphanages();
}else{
launchTheMissiles(); // This should never be called, in any branch
}
Run Code Online (Sandbox Code Playgroud)
鉴于此代码,launchTheMissiles()
保证永远不会被调用?
我的目的是在Windows上Clang
用作替代,以便Valgrind
在我编写的C/C++程序中找到缓冲区溢出,动态内存滥用等.我已按照此处提供的说明成功构建了Clang .
我试图编译一个简单的C程序与-faddress-消毒剂选项(如指定位置)及以下的错误被抛出-
gcc.exe: error: unrecognized command line option '-faddress-sanitizer'
Using built-in specs.
COLLECT_GCC=C:/MinGW/bin/gcc.exe
Target: mingw32
Configured with: ../gcc-4.7.0/configure --enable-languages=c,c++,ada,fortran,objc,obj- c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1-with-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.7.0 (GCC)
clang: error: assembler (via gcc) command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
为什么clang(据我所知)调用GCC?当然GCC不支持-faddress-sanitizer选项.
我很高兴有可能使用这个,因为我一直试图找到一个好的(免费)替代Valgrind一段时间.有人可以帮忙吗?
假设我有类似下面的函数,如何捕获Process.spawn调用的输出?如果进程花费的时间超过指定的超时时间,我也应该能够终止进程.
请注意,该功能还必须是跨平台的(Windows/Linux).
def execute_with_timeout!(command)
begin
pid = Process.spawn(command) # How do I capture output of this process?
status = Timeout::timeout(5) {
Process.wait(pid)
}
rescue Timeout::Error
Process.kill('KILL', pid)
end
end
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在寻找一个高级构建系统/工具,可以帮助我将嵌入式C项目组织成"模块"和"组件".请注意,这两个术语非常主观,因此我的定义如下.
构建系统/工具应该 -
我可以编写自己的构建工具并花费大量时间.然而,这不是我的专业领域,如果有人已经创造了这样的工具,我宁愿不重新发明轮子.
我试图在模拟器上设置一个"out"参数SetArgPointee
.这是我正在测试的代码:
DWORD bodysize = 1024;
char body[1024];
HRESULT hr = req->ReadEntityBody(body, bodysize, false, &bodysize, NULL);
Run Code Online (Sandbox Code Playgroud)
req
是一个IHttpRequest*,我想bodysize
在mock中设置参数3.这是我单元测试的代码:
EXPECT_CALL(req, ReadEntityBody(NotNull(), Ge(1024), false, NotNull(), _))
.WillOnce(SetArgPointee<3>(4))
.WillOnce(Return(ERROR_HANDLE_EOF));
Run Code Online (Sandbox Code Playgroud)
这导致以下奇怪的错误:
错误C2440:'return':无法从'void'转换为'long'(gmock/gmock-actions.h:369)
如果我注释掉.WillOnce(SetArgPointee<3>(4))
,代码会正确编译并执行.这是模拟本身的相关定义:
MOCK_METHOD5(ReadEntityBody, HRESULT(VOID *pvBuffer, DWORD cbBuffer, BOOL fAsync, DWORD *pcbBytesReceived, BOOL *pfCompletionPending));
Run Code Online (Sandbox Code Playgroud)
并且,如果有帮助,我完全嘲笑IHttpRequest.
我目前正在开发一个灵活的C/C++构建框架,我很快就会(有希望)开源.(有关背景,请参阅此问题).
我使用以下命令为源/头文件生成#include文件依赖项.
gcc -M -MM -MF
Run Code Online (Sandbox Code Playgroud)
有没有一种巧妙地推断可执行文件的链接器(.o文件)依赖关系(单元测试+在我的情况下为目标平台的主要可执行文件)使用gcc/GNU实用程序以类似的方式?目前,该框架做了很多假设,并且在确定这些依赖关系时非常愚蠢.
我听说过一种方法,其中nm命令可用于在目标文件中提供未定义符号的列表.例如,在目标文件上运行nm(使用gcc -c编译)会出现类似这样的内容 -
nm -o module.o
module.o: U _undefinedSymbol1
module.o: U _undefinedSymbol2
module.o:0000386f T _definedSymbol
Run Code Online (Sandbox Code Playgroud)
然后,人们将查找其他目标文件,其中定义了这些未定义的符号,以提供成功链接文件所需的目标文件依赖性列表.
这是确定可执行文件的链接器依赖性的最佳实践吗?有没有其他方法可以推断出这些依赖关系?在提出解决方案时,假设所有目标文件已经存在(即已经使用gcc -c编译).
目前我正在处理的基于 Git 的项目,我通常总是在一个子目录中。
下面是我git log --name-only
从存储库根目录的子目录运行命令时的输出。
commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date: Mon Mar 27 09:36:24 2017 +1300
Commit message
child_dir1_from_root/file1 | 184 +--
child_dir2_from_root/file2 | 2 +-
Run Code Online (Sandbox Code Playgroud)
我如何git log
才能输出类似下面的内容?这使得比较列出的文件非常容易,只需复制文件路径并运行,git diff HEAD~ {copied_file_path}
而不必手动修改文件路径然后运行命令。
commit 678bd5ba6fc5474c4c61406768bf6cba5937c5d1
Author: thegreendroid
Date: Mon Mar 27 09:36:24 2017 +1300
Commit message
file1 | 184 +--
../child_dir2_from_root/file2 | 2 +-
Run Code Online (Sandbox Code Playgroud)
我查看了git log
文档,但没有任何突出之处。我可以编写一个脚本来做到这一点,但我很好奇 Git 是否有内置方式。
c++ ×6
c ×4
ruby ×2
unit-testing ×2
windows ×2
build ×1
build-system ×1
clang ×1
client ×1
debugging ×1
dependencies ×1
diff ×1
embedded ×1
gcc ×1
git ×1
git-diff ×1
git-difftool ×1
googlemock ×1
http ×1
linker ×1
linux ×1
process ×1
rspec ×1
rspec2 ×1
saff-squeeze ×1
singleton ×1
stdout ×1
tdd ×1
valgrind ×1