2017年1月19日 星期四

Installing Scala 2.12 on CentOS 7.2 and HelloWorld.scala

http://www.scala-lang.org/files/archive/

wget http://www.scala-lang.org/files/archive/scala-2.11.4.tgz

tar xvf scala-2.11.4.tgz
sudo mv scala-2.11.4 /usr/lib
sudo ln -s /usr/lib/scala-2.11.4/ /usr/lib/scala
export PATH=$PATH:/usr/lib/scala/bin
scala -version
Scala code runner version 2.11.4 -- Copyright 2002-2013, LAMP/EPFL

vi HelloWorld.scala
object HelloWorld {
    def main(args: Array[String]): Unit = {
        println("Hello, world!")
    }
}

(scalac HelloWorld.scala) && ls
HelloWorld.class  HelloWorld$.class  HelloWorld.scala  scala-2.11.4.tgz


scala HelloWorld
Hello, world!

2017年1月11日 星期三

C++ 11 Smart Pointers (to be continued)





C++ 11 Smart Pointers

What is unique_ptr?

Unique pointer is the simplest efficient default smart point to express the intent of unique ownership of an object at a time that it is efficient in the way that it has no atomic reference counting integer with merely the time overhead at destructor for destroying the owned object and possibly the time  overhead at constructor for copying the self-provided non-trivial deleter when compared to raw pointer.

Why use shared_ptrs?

It gives simpler code, and performs a single allocation without explicit new to prevent the two-allocation that may throw exception when a new object is create.




http://stackoverflow.com/questions/22295665/how-much-is-the-overhead-of-smart-pointers-compared-to-normal-pointers-in-c

std::unique_ptr has memory overhead only if you provide it with some non-trivial deleter.
std::shared_ptr always has memory overhead for reference counter, though it is very small.
std::unique_ptr has time overhead only during constructor (if it has to copy the provided deleter) and during destructor (to destroy the owned object).
std::shared_ptr has time overhead in constructor (to create the reference counter), in destructor (to decrement the reference counter and possibly destroy the object) and in assignment operator (to increment the reference counter).
Note that none of them has time overhead in dereferencing (in getting the reference to owned object), while this operation seems to be the most common for pointers.
To sum up, there is some overhead, but it shouldn't make the code slow unless you continuously create and destroy smart pointers.

2017年1月4日 星期三

GDB Debugger on Linux CentOS and Visual Studio 2017 for Linux Development and Remote Debugging

GDB Debugger

Write a program that will cause uncaught exception and core dump

vi main.cpp

int main() {
int x = 1;
int y = 2;
int z = 1/0;
int s = x + y + z;
return s;
}

gcc -g -Wall -o a.out main.cpp

ulimit -c unlimited

./a.out
Floating point exception (core dumped)

ls
a.out  core.22986  main.cpp

Using backtrace command "bt" and "list"
[ricky@pc009 gg]$ gdb a.out core.22986
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/ricky/gg/a.out...done.
[New LWP 22986]
Core was generated by `./a.out'.
Program terminated with signal 8, Arithmetic exception.
#0  0x000000000040050d in main () at main.cpp:4
4       int z = 1/0;
Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.8.x86_64
(gdb) bt
#0  0x000000000040050d in main () at main.cpp:4
(gdb) list
1       int main() {
2       int x = 1;
3       int y = 2;
4       int z = 1/0;
5       int s = x + y + z;
6       return s;
7       }

Real example
[quantprod@hkoffice083 esunny_proxy]$ gdb esunny_proxy core.29018
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /data/quantprod/esunny_proxy/esunny_proxy.20161117.082332.99f3fe3.multiplecontracts...done.

warning: core file may not match specified executable file.
[New LWP 29048]
[New LWP 29037]
[New LWP 29018]
[New LWP 14421]
[New LWP 14432]
[New LWP 14433]
[New LWP 29235]
[New LWP 29047]
[New LWP 29021]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `./esunny_proxy user_p'.
Program terminated with signal 11, Segmentation fault.
#0  0x00007f03e241103f in pthread_timedjoin_np () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.6.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc++-4.8.5-4.el7.x86_64 zlib-1.2.7-15.el7.x86_64
(gdb) bt
#0  0x00007f03e241103f in pthread_timedjoin_np () from /lib64/libpthread.so.0
#1  0x00007f03e1fd4c26 in CEsThread::Join(int) () from /lib/libForeignTradeApi.so
#2  0x00007f03e1ff643a in CTapTcpClient::~CTapTcpClient() () from /lib/libForeignTradeApi.so
#3  0x00007f03e1dc02d6 in CWorker::~CWorker (this=0xa60eb8, __in_chrg=<optimized out>) at ../Worker.cpp:134
#4  0x00007f03e1dbcc2e in DelEsunnyQuotClient (client=0xa60eb0) at ../EsunnyQuotClient.cpp:16
#5  0x000000000046a37d in DestroyQuoteApi (client=client@entry=0xa60eb0) at /home/ricky/formax/XMAX/esunny.proxy/QuoteApi.h:32
#6  0x000000000047bde2 in operator() (this=<optimized out>, p=0xa60eb0) at /home/ricky/formax/XMAX/esunny.proxy/EsunnyProxy.h:148
#7  reset (__p=0xa60eb0, this=0xa450c0) at /usr/include/c++/4.8.2/bits/unique_ptr.h:262
#8  Esunny::EsunnyQuote::Restart (this=0xa45088) at /home/ricky/formax/XMAX/esunny.proxy/EsunnyProxy.h:95
#9  0x000000000047081a in Esunny::RestarterThread::Run (this=0x7fff5c193050) at /home/ricky/formax/XMAX/esunny.proxy/EsunnyProxy.h:44
#10 0x00007f03e1b62220 in ?? () from /lib64/libstdc++.so.6
#11 0x00007f03e240fdc5 in start_thread () from /lib64/libpthread.so.0
#12 0x00007f03e12c9ced in clone () from /lib64/libc.so.6


Real Example 2:
[quantprod@hkoffice083 trycompile]$ gdb a.out core.9477
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /data/quantprod/ricky/trycompile/a.out...done.
[New LWP 9477]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0  0x00007f453e91f03f in pthread_timedjoin_np () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install glibc-2.17-106.el7_2.6.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc++-4.8.5-4.el7.x86_64 zlib-1.2.7-15.el7.x86_64
(gdb) bt
#0  0x00007f453e91f03f in pthread_timedjoin_np () from /lib64/libpthread.so.0
#1  0x00007f453f71ad06 in JoinWithTimeout (timeoutMillis=<optimized out>, this=0x152d380) at ../Basic/EsThread.cpp:152
#2  CEsThread::Join (this=<optimized out>, timeoutMillisec=<optimized out>) at ../Basic/EsThread.cpp:214
#3  0x00007f453f7214ca in CTapTcpClient::~CTapTcpClient (this=0x152d048, __in_chrg=<optimized out>) at ../socket/TcpClient.cpp:72
#4  0x00007f453f71f2d6 in CWorker::~CWorker (this=0x152d018, __in_chrg=<optimized out>) at ../Worker.cpp:134
#5  0x00007f453f71bc2e in DelEsunnyQuotClient (client=0x152d010) at ../EsunnyQuotClient.cpp:16
#6  0x0000000000400c87 in main (argc=1, argv=0x7ffcd6c1f8d8) at main.cpp:22

sudo yum install yum-utils
sudo debuginfo-install glibc-2.17-106.el7_2.6.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc++-4.8.5-4.el7.x86_64 zlib-1.2.7-15.el7.x86_64

[quantprod@hkoffice083 trycompile]$ gdb a.out core.10366
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-80.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /data/quantprod/ricky/trycompile/a.out...done.
[New LWP 10366]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
#0  pthread_timedjoin_np (threadid=140579203938048, thread_return=0x0, abstime=0x7ffc65ad30d0) at pthread_timedjoin.c:43
43        if (INVALID_NOT_TERMINATED_TD_P (pd))
(gdb) bt
#0  pthread_timedjoin_np (threadid=140579203938048, thread_return=0x0, abstime=0x7ffc65ad30d0) at pthread_timedjoin.c:43
#1  0x00007fdb26f5bd06 in JoinWithTimeout (timeoutMillis=<optimized out>, this=0x1570380) at ../Basic/EsThread.cpp:152
#2  CEsThread::Join (this=<optimized out>, timeoutMillisec=<optimized out>) at ../Basic/EsThread.cpp:214
#3  0x00007fdb26f624ca in CTapTcpClient::~CTapTcpClient (this=0x1570048, __in_chrg=<optimized out>) at ../socket/TcpClient.cpp:72
#4  0x00007fdb26f602d6 in CWorker::~CWorker (this=0x1570018, __in_chrg=<optimized out>) at ../Worker.cpp:134
#5  0x00007fdb26f5cc2e in DelEsunnyQuotClient (client=0x1570010) at ../EsunnyQuotClient.cpp:16
#6  0x0000000000400c87 in main (argc=1, argv=0x7ffc65ad3298) at main.cpp:22



Visual Studio Community 2017 RC

Download VS 2017


Install only Linux development with C++


Create "Empty Project (Linux)"


Add > New Item


Code:
#include <iostream>
int main() {
       int x = 1;
       int y = 2;
       int z = 1 / 0;
       int s = x + y + z;
       return 0;

}

Start "Remote GDB debugger"

Could not launch gdbserver Error
Could not launch gdbserver. gdbserver could either be missing on your system and needs to be instaled, or it failed to start the program.

Install gdb-gdbserver on CentOS 7.2
sudo yum install -y gdb-gdbserver

Visual Studio Debugger
It shows the debugging environment with "Exception Unhandled"

Remote Files
On CentOS 7, the directory "projects" is created by Visual Studio
[ricky@pc009 Project1]$ pwd && ls
/home/ricky/projects/Project1
bin  obj  Source.cpp

2023 Promox on Morefine N6000 16GB 512GB

2023 Promox on Morefine N6000 16GB 512GB Software Etcher 100MB (not but can be rufus-4.3.exe 1.4MB) Proxmox VE 7.4 ISO Installer (1st ISO re...