非常有趣的是,以下C#代码将在.NET4.0上崩溃,但在.NET2.0上运行良好.
C#代码
class Program
{
static void Main(string[] args)
{
try
{
ExceptionTest();
Console.WriteLine("Done!");
}
catch (Exception e)
{
Console.WriteLine("Error !!!");
Console.WriteLine(e.Message);
}
}
[DllImport("badapp")]
private static extern int ExceptionTest();
}
Run Code Online (Sandbox Code Playgroud)
C++代码
extern "C" __declspec(dllexport) int ExceptionTest()
{
IUnknown* pUnk = NULL;
pUnk->AddRef();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果针对.NET2.0编译上面的C#代码,一切正常.只针对.NET4.0进行编译会使其在运行时崩溃.
我怀疑自.NET4.0以来系统异常捕获机制已经改变.有任何想法吗?
我需要一个宏来帮助输出给定参数的名称和值.它类似于以下代码.
#define AA "Hello"
#define BB "World"
#define PRINT(input_param) printf("input_param: %s\n", (input_param))
void main()
{
PRINT(AA);
PRINT(BB);
}
Run Code Online (Sandbox Code Playgroud)
我期待结果: AA: Hello\n BB: World\n
但显然不是.有人可以纠正我吗?谢谢.
我需要将部分项目从C#切换到Java.但在此之前,我想仔细和完整地比较两种语言.
关于lambda表达式,我可以通过C#编写非常优雅的代码,问题是如何在Java中优雅地实现相同的功能?提前致谢!
class Program
{
enum Gender
{
Male,
Female
}
class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public Gender Gender { get; set; }
public override string ToString()
{
return string.Format("Id: {0}, Name: {1}, Age: {2}, Gender: {3}", Id, Name, Age, Gender);
}
}
static void Main(string[] args)
{
var students = new[] {
new Student { Id = 1, Name = …Run Code Online (Sandbox Code Playgroud) 我配置了 3 个日志节点,比如说 JN1、JN2、JN3。他们每个人都将编辑日志保存在 /tmp/hadoop/journalnode/mycluster...
在此基础上,我启动了我的名称节点、辅助名称节点和一堆数据节点。系统运行良好,直到有一天JN2和JN3死掉了。此外,磁盘已损坏。
然后我购买了新磁盘并重新启动了JN2和JN3。糟糕的是它不再起作用了。
它不断地抱怨
org.apache.hadoop.hdfs.qjournal.protocol.JournalNotFormattedException: Journal Storage Directory /tmp/hadoop/dfs/journalnode/mycluster not formatted
at org.apache.hadoop.hdfs.qjournal.server.Journal.checkFormatted(Journal.java:457)
at org.apache.hadoop.hdfs.qjournal.server.Journal.getEditLogManifest(Journal.java:640)
at org.apache.hadoop.hdfs.qjournal.server.JournalNodeRpcServer.getEditLogManifest(JournalNodeRpcServer.java:185)
at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolServerSideTranslatorPB.getEditLogManifest(QJournalProtocolServerSideTranslatorPB.java:224)
at org.apache.hadoop.hdfs.qjournal.protocol.QJournalProtocolProtos$QJournalProtocolService$2.callBlockingMethod(QJournalProtocolProtos.java:25431)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2013)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007)
Run Code Online (Sandbox Code Playgroud)
有没有办法从唯一活着的 JN1 中恢复 JN2 和 JN3?
非常感谢所有可能的解决方案!
谢谢,迈尔斯
以下bash脚本不起作用,因为命令'expect'始终返回0,无论远程脚本/tmp/my.sh返回哪个退出代码.
任何让它成功的想法?谢谢.
#!/usr/bash
user=root
passwd=123456abcd
host=10.58.33.21
expect -c "
spawn ssh -o StrictHostKeyChecking=no -l $user $host bash -x /tmp/my.sh
expect {
\"assword:\" {send \"$passwd\r\"}
eof {exit $?}
}
"
case "$?" in
0) echo "Password successfully changed on $host by $user" ;;
1) echo "Failure, password unchanged" ;;
2) echo "Failure, new and old passwords are too similar" ;;
3) echo "Failure, password must be longer" ;;
*) echo "Password failed to change on $host" ;;
esac
Run Code Online (Sandbox Code Playgroud)
编辑于2013年11月27日上午10:23
感谢您的评论.让我再次强调这个问题,
主脚本应该在Linux服务器A运行 …
使用VC2012时,编译器将在没有捕获列表的情况下使用lambda函数时自动处理调用约定.例如
EnumWindows([](HWND, LPARAM){ return TRUE; }, 0); // compile with no problem
Run Code Online (Sandbox Code Playgroud)
但是当我将this指针放到捕获列表中时,它无法编译.例如
EnumWindows([this](HWND, LPARAM){ return my_class_member_function(); }, 0); // error
Run Code Online (Sandbox Code Playgroud)
如果有办法在lambda函数中调用成员函数,有人可以告诉我吗?
谢谢,迈尔斯