https://stackoverflow.com/questions/4822471/count-number-of-lines-in-a-git-repository
$ git ls-files|xargs wc -l
$ git ls-files|xargs cat|wc -l
Wednesday, February 14, 2018
Thursday, January 18, 2018
gdb
1. Getting PID / Attach gdb to current process with PID
$ ps l | grep [program]
$ sudo gdb [program]
$ set target-asycn 1
$ attach [pid] &
~~~~
$ detach
$ quit
2. Bash command line에서 batch로 gdb command 입력
$gdb --ex="set breakpoint pending on" --ex="b some.cpp:13" --ex="r" --ex="plot mat" -args ./bin/ex arg1 arg2
--ex 순서대로 gdb command 자동입력 (배치파일로 입력하는건 다음에 정리)
-args : 프로그래명 arguments 순서대로 입력.
3. Core file 로부터 symbol 불러오기
Core dump를 bash 에서 명령하는 방법을 주로 이야기하지만, 나는 gdb에서 디버깅하다가 중간에 종료하는 경우가 더 많으므로, gdb 에서 core dump를 하는 방법부터 대신 다룸.
gdb> generate-core-file [core_filename]
$ gdb [program] [core_filename]
Core dump도 debug info 가 필요하므로 bash 의 core dump 명령이든, gdb 의 core dump 명령이든 프로그램은 debug mode나 최소한 RelWithDebInfo 로 빌드되있어야함.
4. 그외 기본적인 gdb command
gdb> set breakpoint pending on : 아직 load 되지 않은 shared-lib의 코드에 break point 허용
gdb> b : break point
n : Next
f [stack number] : 지정된 frame 으로 이동
bt : back trace. stack 의 frame을 나열
info b : break point를 보여줌
generate-core-file : 중단점에 걸린 현재 상태를 core dump. 이후
5. Watching
gdb> rwatch *0xfeedface
References>
https://stackoverflow.com/questions/100444/how-to-set-breakpoints-on-future-shared-libraries-with-a-command-flag
$ ps l | grep [program]
$ sudo gdb [program]
$ set target-asycn 1
$ attach [pid] &
~~~~
$ detach
$ quit
2. Bash command line에서 batch로 gdb command 입력
$gdb --ex="set breakpoint pending on" --ex="b some.cpp:13" --ex="r" --ex="plot mat" -args ./bin/ex arg1 arg2
--ex 순서대로 gdb command 자동입력 (배치파일로 입력하는건 다음에 정리)
-args : 프로그래명 arguments 순서대로 입력.
3. Core file 로부터 symbol 불러오기
Core dump를 bash 에서 명령하는 방법을 주로 이야기하지만, 나는 gdb에서 디버깅하다가 중간에 종료하는 경우가 더 많으므로, gdb 에서 core dump를 하는 방법부터 대신 다룸.
gdb> generate-core-file [core_filename]
$ gdb [program] [core_filename]
Core dump도 debug info 가 필요하므로 bash 의 core dump 명령이든, gdb 의 core dump 명령이든 프로그램은 debug mode나 최소한 RelWithDebInfo 로 빌드되있어야함.
4. 그외 기본적인 gdb command
gdb> set breakpoint pending on : 아직 load 되지 않은 shared-lib의 코드에 break point 허용
gdb> b : break point
n : Next
f [stack number] : 지정된 frame 으로 이동
bt : back trace. stack 의 frame을 나열
info b : break point를 보여줌
generate-core-file : 중단점에 걸린 현재 상태를 core dump. 이후
5. Watching
gdb> rwatch *0xfeedface
References>
https://stackoverflow.com/questions/100444/how-to-set-breakpoints-on-future-shared-libraries-with-a-command-flag
Thursday, December 21, 2017
SSE optimization
https://www.youtube.com/watch?v=GwII1AJzKN4
26:45 : (Visual studio) 디스어셈블리 디버깅
32:36 : go to disassembly
26:45 : (Visual studio) 디스어셈블리 디버깅
32:36 : go to disassembly
Tuesday, November 7, 2017
Boost python / Cython from ROS catkin build
* 프로젝트에서는 사용했으나, 아래 예제코드로 패키지를 새로 생성해보진 않음.
1. Boost python
<?xml version="1.0"?>
<package format="2">
<name>some_boost_pkg</name>
<version>0.0.0</version>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>cmake_modules</build_depend> # 꼭 필요한지 여부 아직 확인 못함
<export>
</export>
</package>
project(some_boost_pkg)
add_compile_options(-std=c++11) # boost python 컴파일에 c+11이 필요했던걸로 기억함. 아마도.
find_package(catkin REQUIRED COMPONENTS #0
~~~~
)
# 아래의 find_package는 윗줄의 #0 이후에 호출할것.
# 버그인지 모르겠으나, ${Boost_LIBRARIES} 등이 공백으로 덮어씌워지는걸 피하기 위해.
# message(${Boost_LIBRARIES}) 로 확인함.
find_package(cmake_modules REQUIRED)
find_package(PythonLibs 2.7 REQUIRED)
find_package(Boost REQUIRED COMPONENTS system filesystem thread python)
include_directories(include
${Boost_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
)
catkin_package(
LIBRARIES
my_boost_lib # 1
)
add_library(my_boost_lib ${~ boost python source codes ~} )
target_link_libraries(my_boost_lib
${PYTHON_LIBRARIES}
${Boost_LIBRARIES}
)
set_target_properties(my_boost_lib PROPERTIES
PREFIX ""
LIBRARY_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION}
) #2
# 1, #2 가 있어야 compile destination이 CATKIN_WORKSPACE/devel/.private/some_boost_pkg/lib/python2.7/dist-packages/some_boost_pkg/my_boost_lib.so 가 된다.
prefix를 안비우면 파일명이 libmy_boost_lib.so 가 된다.
${~ boost python source codes ~}의 소스코드는 부스트 파이선 튜토리얼 참고.
http://www.boost.org/doc/libs/1_62_0/libs/python/doc/html/tutorial/index.html
2. Cython
boost python과 같음. 패키지 명만 some_boost_pkg 대신 some_cython_pkg 으로 명명했다고 가정하고 진행.
project(some_cython_pkg)
add_compile_options(-std=c++11)
find_package(catkin REQUIRED)
find_package(cmake_modules REQUIRED)
find_package(PythonLibs 2.7 REQUIRED)
include_directories(includ
${catkin_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
)
catkin_package(
LIBRARIES
my_cython_lib # 1
)
catkin_python_setup() # Generate cython_build directory and .c, cxx source codes.
add_library(my_cython_lib
"cython_build/src/my_cython_codes.c" #3
)
set_target_properties(my_cython_lib PROPERTIES
PREFIX ""
LIBRARY_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION}) #2
$ python
>> import some_boost_pkg.my_boost_lib as m1
>> import some_cython_pkg.my_cython_lib as m2
1. Boost python
1.1 package.xml
<?xml version="1.0"?><package format="2">
<name>some_boost_pkg</name>
<version>0.0.0</version>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>cmake_modules</build_depend> # 꼭 필요한지 여부 아직 확인 못함
<export>
</export>
</package>
1.2 CMakelists.txt
cmake_minimum_required(VERSION 2.8.3)project(some_boost_pkg)
add_compile_options(-std=c++11) # boost python 컴파일에 c+11이 필요했던걸로 기억함. 아마도.
~~~~
)
# 아래의 find_package는 윗줄의 #0 이후에 호출할것.
# 버그인지 모르겠으나, ${Boost_LIBRARIES} 등이 공백으로 덮어씌워지는걸 피하기 위해.
# message(${Boost_LIBRARIES}) 로 확인함.
find_package(cmake_modules REQUIRED)
find_package(PythonLibs 2.7 REQUIRED)
find_package(Boost REQUIRED COMPONENTS system filesystem thread python)
include_directories(include
${Boost_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
)
catkin_package(
LIBRARIES
my_boost_lib # 1
)
add_library(my_boost_lib ${~ boost python source codes ~} )
target_link_libraries(my_boost_lib
${PYTHON_LIBRARIES}
${Boost_LIBRARIES}
)
set_target_properties(my_boost_lib PROPERTIES
PREFIX ""
LIBRARY_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION}
) #2
# 1, #2 가 있어야 compile destination이 CATKIN_WORKSPACE/devel/.private/some_boost_pkg/lib/python2.7/dist-packages/some_boost_pkg/my_boost_lib.so 가 된다.
prefix를 안비우면 파일명이 libmy_boost_lib.so 가 된다.
${~ boost python source codes ~}의 소스코드는 부스트 파이선 튜토리얼 참고.
http://www.boost.org/doc/libs/1_62_0/libs/python/doc/html/tutorial/index.html
2. Cython
2. 1 package.xml
boost python과 같음. 패키지 명만 some_boost_pkg 대신 some_cython_pkg 으로 명명했다고 가정하고 진행.2. 2 CMakeLists.txt
cmake_minimum_required(VERSION 2.8.3)project(some_cython_pkg)
add_compile_options(-std=c++11)
find_package(catkin REQUIRED)
find_package(cmake_modules REQUIRED)
find_package(PythonLibs 2.7 REQUIRED)
include_directories(includ
${catkin_INCLUDE_DIRS}
${PYTHON_INCLUDE_DIRS}
)
catkin_package(
LIBRARIES
my_cython_lib # 1
)
catkin_python_setup() # Generate cython_build directory and .c, cxx source codes.
add_library(my_cython_lib
"cython_build/src/my_cython_codes.c" #3
)
set_target_properties(my_cython_lib PROPERTIES
PREFIX ""
LIBRARY_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION}) #2
2.3 setup.py
http://wiki.ros.org/rospy_tutorials/Tutorials/Makefile 의 setup.py 파일을 아래와 같이 작성해서 package.xml과 같은 폴더에 저장하면 된다.
#!/usr/bin/python
# -*- coding:utf-8 -*-
## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD
from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup
from Cython.Build import cythonize
#from catkin_tools.context import Context
#ctx = Context.load()
#build_path = ctx.build_space_abs + "/cython_build" # 경로는 취향에 따라.
build_path = 'cython_build'
setup_args = generate_distutils_setup(
packages=['some_boost_pkg'], # ROS package name
package_dir={'': 'src'},
requires=['std_msgs', 'rospy'], # 만약 코드에서 필요하다면
ext_modules = cythonize("./src/my_cython_codes.pyx", build_dir=build_path) #3의 경로에 c코드를 생성하게함.
)
setup(**setup_args)
2.4 *.pyx
패키지/src 폴더의 my_cython_codes.pyx 파일은 다음 링크의 hello.pyx 코드 참고해서 작성.3. Result / Test
위와 같은 방법으로 패키지를 생성하고 catkin build를 수행하면, python에서 다음과 같이 함수 호출 가능.$ python
>> import some_boost_pkg.my_boost_lib as m1
>> import some_cython_pkg.my_cython_lib as m2
>> m1.function1()
>> m2.function2()
Sunday, October 15, 2017
CLi booting + boot prorgram
https://askubuntu.com/questions/826325/how-to-revert-usb-wifi-interface-name-from-wlxxxxxxxxxxxxx-to-wlanx
https://linux.m2osw.com/boot-command-line-console-ubuntu-1604
https://linux.m2osw.com/boot-command-line-console-ubuntu-1604
$ sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="text"
GRUB_CMDLINE_LINUX="text"
GRUB_TERMINAL=console
$ update-grub
$ systemctl set-default multi-user.target
$ reboot
Saturday, September 23, 2017
mavros, c++ grammar
https://stackoverflow.com/questions/20790932/what-is-the-logic-behind-the-using-keyword-in-c
for https://github.com/mavlink/mavros/blob/master/mavros/include/mavros/mavros_uas.h#L66
https://msdn.microsoft.com/ko-kr/library/dd293608.aspx
for https://github.com/mavlink/mavros/blob/master/mavros/src/lib/mavros.cpp#L134
https://msdn.microsoft.com/ko-kr/library/dn956974.aspx
for
for https://github.com/mavlink/mavros/blob/master/mavros/include/mavros/mavros_uas.h#L66
https://msdn.microsoft.com/ko-kr/library/dd293608.aspx
for https://github.com/mavlink/mavros/blob/master/mavros/src/lib/mavros.cpp#L134
https://msdn.microsoft.com/ko-kr/library/dn956974.aspx
for
Wednesday, September 6, 2017
Subscribe to:
Posts (Atom)
