我在intel 32位机器上使用Ubuntu 12.04和linux-headers-3.2.0-60.我正在尝试构建这个简单的程序来理解PTrace.但是在编译期间遇到错误.
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <linux/user.h> /* For constants
ORIG_EAX etc */
int main()
{ pid_t child;
long orig_eax;
child = fork();
if(child == 0) {
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl("/bin/ls", "ls", NULL);
}
else {
wait(NULL);
orig_eax = ptrace(PTRACE_PEEKUSER,
child, 4 * ORIG_EAX,
NULL);
printf("The child made a "
"system call %ld\n", orig_eax);
ptrace(PTRACE_CONT, child, NULL, NULL);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
make all
Building file: ../src/Test.cpp
Invoking: Cross G++ …Run Code Online (Sandbox Code Playgroud) 我在c ++中有基础库,客户端应用程序在C#中.有一个c ++/cli接口可以从C#访问c ++ api.一切都运行正常,直到多个应用程序域没有像NUnit或WCF托管一样发挥,即有一个应用程序域.
我已经在cli 中的gcroot中存储了托管对象以进行回调.我已经读过这是应用程序域问题的根本原因("无法通过AppDomains传递GCHandle")因为它们没有应用程序域信息(http://lambert.geek.nz/2007/05/29/unmanaged -appdomain-callback /).有人建议使用委托,但我的基础c ++层期望对象不是函数指针(http://www.lenholgate.com/blog/2009/07/error-cannot-pass-a-gchandle-across-appdomains.html).我也尝试过IntPtr,但在这种情况下,我无法在回调期间将其强制转换为我的托管对象.
UPDATE
让我再详细说明一下我的问题.
我在C#中有"Receiver"类,它作为输入参数传递给api之一.此接收器对象用于回调.在C++/CLI中,我创建了一个Native/unmanaged类"ObjectBinder",它与托管的Receiver类具有相同的副本(具有相同的方法).它保存了gcroot中托管接收者对象的参考.当我们从C#调用api时,它来到CLI层,app域是"client exe".我们在gcroot中的ObjectBinder中存储参数"managed receiver object",并将本机ObjectBinder对象的引用传递给C++.现在后端代码(c ++和c)将一个asyn回调(新线程)发送到c ++层,该层使用ObjectBinder对象向CLI发送回调用.现在我们在ObjectBinder对象的CLI层中.但是App域已被更改(在WCF或NUNIT或任何其他创建它自己的App域的服务的情况下,在编译时不知道).现在我想访问存储在gcroot中的托管Receiver对象,以便将回调发送回C#,但它给出了APP DOMAIN错误.
我也尝试过IntPtr和IUnknown*而不是gcroot与Marshal :: GetIUnknownForObject和Marshal :: GetObjectForIUnknown但是得到相同的错误.
我有大量过去7天的数据.我应用了保留政策,突然所有数据都被删除了.我有单一的涌入运行实例.
CREATE RETENTION POLICY stats_30_day ON server_stats DURATION 30d REPLICATION 1
ALTER RETENTION POLICY stats_30_day ON server_stats DURATION 30d REPLICATION 1 default
Run Code Online (Sandbox Code Playgroud)
知道出了什么问题吗?
我想为我的产品设置一个单元测试环境.我在Lua的nginx上构建了一个使用mysql和redis的web应用程序.我认为虽然我是码头工人的新手,但码头工作人员会很好.我的应用程序在centos服务器(生产服务器)上运行.
我打算为mysql,redis和webapp设置不同的容器,然后在我的mac(我的开发机器是MAC)或VM中编写UT应用程序(使用Busted框架进行Lua的单元测试)来测试它.UT应用程序将与docker容器nginx通信,nginx将使用容器mysql和redis.这个好吗 ?如果是,有人可以指导我如何做到这一点?也许一些很好的链接?如果不是,那可能是更好的方法.我已经尝试过使用vagrant但是花了太多时间,这不应该是我的UT情况.
我有 10 个节点的 kafka 集群。kafka 代理和 Zookeeper 都在每个节点上运行。最近我们添加了 3 个新节点 8、9 和 10,昨天有 2 个节点关闭(2 和 4)。我有一个有 60 个分区和 3 个复制的主题。在kafka管理器中,Brokers Skewed %显示为50和Brokers Leader Skewed %70。我已经从UI手动重新分配了分区, Brokers Skewed %现在是0,但它没有改变Brokers Leader Skewed %。我还运行了命令:
$ kafka-preferred-replica-election.sh --zookeeper localhost:2181 --path-to-json-file test.json
Warning: --zookeeper is deprecated and will be removed in a future version of Kafka.
Use --bootstrap-server instead to specify a broker to connect to.
Created preferred replica election path with ...
Successfully started preferred replica …Run Code Online (Sandbox Code Playgroud) 我对独特指针的释放方法感到困惑.这是我的示例程序.
class Test
{
public:
Test(){std::cout << "ctor" << std::endl;}
~Test(){std::cout << "dtor" << std::endl;}
};
int main() {
std::unique_ptr<Test> ptr(new Test());
ptr.release(); // memory leak
//ptr.reset(); // this is ok but not necessary
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
ctor
Run Code Online (Sandbox Code Playgroud)
因为它不打印dtor我假设它不调用析构函数Test会导致内存泄漏.是吗?
{
"_index" : "test",
"_type" : "test",
"_id" : "1212",
"_version" : 5,
"found" : true,
"_source" : {
"count" : 42,
"list_data" : [ {
"list_id" : 11,
"timestamp" : 1469125397
}, {
"list_id" : 122,
"timestamp" : 1469050965
} ]
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的文档架构.list_data是嵌套对象.我要求更新/删除内部的特定字段list_data.我能够count使用groovy脚本更新字段.
$ curl -XPOST 'localhost:9200/index/type/1212/_update?pretty' -d '
{
"script" : "ctx._source.count = 41"
}'
Run Code Online (Sandbox Code Playgroud)
但不知道如何更新嵌套对象.
例如,我想将其添加到list_data.
{
"list_id" : 121,
"timestamp" : 1469050965
}
Run Code Online (Sandbox Code Playgroud)
我的文件应改为:
{
"_index" : …Run Code Online (Sandbox Code Playgroud) 我有一个简单的java程序。一个主线程 ( main()) 被创建并启动另一个线程t。
class T extends Thread{
@Override
public void run() {
while (true){
System.out.println("Inside thread");
}
}
}
public class Main {
public static void main(String[] args) {
Thread t = new T();
t.start();
//t.join();
System.out.println("end");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
end
Inside thread
Inside thread
Inside thread
....
....
Run Code Online (Sandbox Code Playgroud)
它无限打印Inside thread。我不是在使用 join() 等待主线程中的子线程。打印结束后主线程不应该退出吗?
更新:
当 Java 虚拟机启动时,通常有一个非守护线程(通常调用某个指定类的名为 main 的方法)。Java 虚拟机继续执行线程,直到发生以下任一情况:
- 已调用 Runtime 类的退出方法并且安全管理器已允许退出操作发生。
- 所有不是守护线程的线程都已死亡,要么是从对 run 方法的调用中返回,要么是通过抛出传播到 run 方法之外的异常。
我找到了原因。第二点澄清了它。我假设所有子线程都将在主线程退出后终止(我错了)并且 JVM 应该关闭。
我不确定这段代码是如何工作的.根据我的理解,应该定义所有声明的方法.
class Test
{
public:
void foo();
};
int main()
{
Test t;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在类中Test,方法foo()已声明但未定义,仍然此代码正常工作.请解释为什么这样做.这样做是不是错误,因为只有声明的方法没有用,除非它是在抽象类或接口中?我的猜测是方法的声明告诉编译器它,所以编译器不会抱怨它,它会正常工作,直到有人真正尝试使用此方法.如果是这样,那么为什么允许这样做仍然没有意义?是否有任何具体原因或用途?
c++ ×2
.net ×1
apache-kafka ×1
c# ×1
c++-cli ×1
c++11 ×1
com ×1
com-interop ×1
docker ×1
groovy ×1
influxdb ×1
java ×1
linux ×1
lua ×1
memory-leaks ×1
methods ×1
openresty ×1
ptrace ×1
ubuntu-12.04 ×1
unique-ptr ×1
unit-testing ×1