Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
32e65573
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
32e65573
编写于
5月 11, 2022
作者:
wafwerar
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(os): add print trace func.
上级
9d2ba0a3
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
191 addition
and
7 deletion
+191
-7
cmake/addr2line_CMakeLists.txt.in
cmake/addr2line_CMakeLists.txt.in
+12
-0
cmake/cmake.options
cmake/cmake.options
+6
-0
cmake/libdwarf_CMakeLists.txt.in
cmake/libdwarf_CMakeLists.txt.in
+12
-0
contrib/CMakeLists.txt
contrib/CMakeLists.txt
+48
-1
include/os/osMemory.h
include/os/osMemory.h
+1
-0
source/os/CMakeLists.txt
source/os/CMakeLists.txt
+13
-3
source/os/src/osMemory.c
source/os/src/osMemory.c
+99
-3
未找到文件。
cmake/addr2line_CMakeLists.txt.in
0 → 100644
浏览文件 @
32e65573
# addr2line
ExternalProject_Add(addr2line
GIT_REPOSITORY https://github.com/davea42/libdwarf-addr2line.git
GIT_TAG master
SOURCE_DIR "${TD_CONTRIB_DIR}/addr2line"
BINARY_DIR "${TD_CONTRIB_DIR}/addr2line"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
cmake/cmake.options
浏览文件 @
32e65573
...
@@ -48,6 +48,12 @@ IF(${TD_WINDOWS})
...
@@ -48,6 +48,12 @@ IF(${TD_WINDOWS})
ENDIF ()
ENDIF ()
option(
BUILD_ADDR2LINE
"If build addr2line"
OFF
)
option(
option(
BUILD_TEST
BUILD_TEST
"If build unit tests using googletest"
"If build unit tests using googletest"
...
...
cmake/libdwarf_CMakeLists.txt.in
0 → 100644
浏览文件 @
32e65573
# libdwarf
ExternalProject_Add(libdwarf
GIT_REPOSITORY https://github.com/davea42/libdwarf-code.git
GIT_TAG libdwarf-0.3.1
SOURCE_DIR "${TD_CONTRIB_DIR}/libdwarf"
BINARY_DIR "${TD_CONTRIB_DIR}/libdwarf"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
contrib/CMakeLists.txt
浏览文件 @
32e65573
...
@@ -98,6 +98,12 @@ if(${BUILD_WITH_NURAFT})
...
@@ -98,6 +98,12 @@ if(${BUILD_WITH_NURAFT})
cat
(
"
${
TD_SUPPORT_DIR
}
/nuraft_CMakeLists.txt.in"
${
CONTRIB_TMP_FILE
}
)
cat
(
"
${
TD_SUPPORT_DIR
}
/nuraft_CMakeLists.txt.in"
${
CONTRIB_TMP_FILE
}
)
endif
(
${
BUILD_WITH_NURAFT
}
)
endif
(
${
BUILD_WITH_NURAFT
}
)
# addr2line
if
(
${
BUILD_ADDR2LINE
}
)
cat
(
"
${
TD_SUPPORT_DIR
}
/libdwarf_CMakeLists.txt.in"
${
CONTRIB_TMP_FILE
}
)
cat
(
"
${
TD_SUPPORT_DIR
}
/addr2line_CMakeLists.txt.in"
${
CONTRIB_TMP_FILE
}
)
endif
(
${
BUILD_ADDR2LINE
}
)
# download dependencies
# download dependencies
configure_file
(
${
CONTRIB_TMP_FILE
}
"
${
TD_CONTRIB_DIR
}
/deps-download/CMakeLists.txt"
)
configure_file
(
${
CONTRIB_TMP_FILE
}
"
${
TD_CONTRIB_DIR
}
/deps-download/CMakeLists.txt"
)
execute_process
(
COMMAND
"
${
CMAKE_COMMAND
}
"
-G
"
${
CMAKE_GENERATOR
}
"
.
execute_process
(
COMMAND
"
${
CMAKE_COMMAND
}
"
-G
"
${
CMAKE_GENERATOR
}
"
.
...
@@ -327,7 +333,48 @@ if(${BUILD_WITH_SQLITE})
...
@@ -327,7 +333,48 @@ if(${BUILD_WITH_SQLITE})
endif
(
NOT TD_WINDOWS
)
endif
(
NOT TD_WINDOWS
)
endif
(
${
BUILD_WITH_SQLITE
}
)
endif
(
${
BUILD_WITH_SQLITE
}
)
# pthread
# addr2line
if
(
${
BUILD_ADDR2LINE
}
)
check_include_file
(
"sys/types.h"
HAVE_SYS_TYPES_H
)
check_include_file
(
"sys/stat.h"
HAVE_SYS_STAT_H
)
check_include_file
(
"inttypes.h"
HAVE_INTTYPES_H
)
check_include_file
(
"stddef.h"
HAVE_STDDEF_H
)
check_include_file
(
"stdlib.h"
HAVE_STDLIB_H
)
check_include_file
(
"string.h"
HAVE_STRING_H
)
check_include_file
(
"memory.h"
HAVE_MEMORY_H
)
check_include_file
(
"strings.h"
HAVE_STRINGS_H
)
check_include_file
(
"stdint.h"
HAVE_STDINT_H
)
check_include_file
(
"unistd.h"
HAVE_UNISTD_H
)
check_include_file
(
"sgidefs.h"
HAVE_SGIDEFS_H
)
check_include_file
(
"stdafx.h"
HAVE_STDAFX_H
)
check_include_file
(
"elf.h"
HAVE_ELF_H
)
check_include_file
(
"libelf.h"
HAVE_LIBELF_H
)
check_include_file
(
"libelf/libelf.h"
HAVE_LIBELF_LIBELF_H
)
check_include_file
(
"alloca.h"
HAVE_ALLOCA_H
)
check_include_file
(
"elfaccess.h"
HAVE_ELFACCESS_H
)
check_include_file
(
"sys/elf_386.h"
HAVE_SYS_ELF_386_H
)
check_include_file
(
"sys/elf_amd64.h"
HAVE_SYS_ELF_AMD64_H
)
check_include_file
(
"sys/elf_sparc.h"
HAVE_SYS_ELF_SPARC_H
)
check_include_file
(
"sys/ia64/elf.h"
HAVE_SYS_IA64_ELF_H
)
set
(
VERSION 0.3.1
)
set
(
PACKAGE_VERSION
"
\"
${
VERSION
}
\"
"
)
configure_file
(
libdwarf/cmake/config.h.cmake config.h
)
file
(
GLOB_RECURSE LIBDWARF_SOURCES
"libdwarf/src/lib/libdwarf/*.c"
)
add_library
(
libdwarf STATIC
${
LIBDWARF_SOURCES
}
)
set_target_properties
(
libdwarf PROPERTIES OUTPUT_NAME
"libdwarf"
)
if
(
HAVE_LIBELF_H OR HAVE_LIBELF_LIBELF_H
)
target_link_libraries
(
libdwarf PUBLIC libelf
)
endif
()
target_include_directories
(
libdwarf SYSTEM PUBLIC
"libdwarf/src/lib/libdwarf"
${
CMAKE_BINARY_DIR
}
/contrib
)
file
(
READ
"addr2line/addr2line.c"
ADDR2LINE_CONTENT
)
string
(
REPLACE
"static int"
"int"
ADDR2LINE_CONTENT
"
${
ADDR2LINE_CONTENT
}
"
)
string
(
REPLACE
"static void"
"void"
ADDR2LINE_CONTENT
"
${
ADDR2LINE_CONTENT
}
"
)
string
(
REPLACE
"main("
"main_addr2line("
ADDR2LINE_CONTENT
"
${
ADDR2LINE_CONTENT
}
"
)
file
(
WRITE
"addr2line/addr2line.c"
"
${
ADDR2LINE_CONTENT
}
"
)
add_library
(
addr2line STATIC
"addr2line/addr2line.c"
)
target_link_libraries
(
addr2line PUBLIC libdwarf dl z
)
target_include_directories
(
addr2line PUBLIC
"libdwarf/src/lib/libdwarf"
)
endif
(
${
BUILD_ADDR2LINE
}
)
# ================================================================================================
# ================================================================================================
...
...
include/os/osMemory.h
浏览文件 @
32e65573
...
@@ -35,6 +35,7 @@ void *taosMemoryRealloc(void *ptr, int32_t size);
...
@@ -35,6 +35,7 @@ void *taosMemoryRealloc(void *ptr, int32_t size);
void
*
taosMemoryStrDup
(
void
*
ptr
);
void
*
taosMemoryStrDup
(
void
*
ptr
);
void
taosMemoryFree
(
void
*
ptr
);
void
taosMemoryFree
(
void
*
ptr
);
int32_t
taosMemorySize
(
void
*
ptr
);
int32_t
taosMemorySize
(
void
*
ptr
);
void
taosPrintBackTrace
();
#define taosMemoryFreeClear(ptr) \
#define taosMemoryFreeClear(ptr) \
do { \
do { \
...
...
source/os/CMakeLists.txt
浏览文件 @
32e65573
...
@@ -17,15 +17,25 @@ endif ()
...
@@ -17,15 +17,25 @@ endif ()
if
(
USE_TD_MEMORY
)
if
(
USE_TD_MEMORY
)
add_definitions
(
-DUSE_TD_MEMORY
)
add_definitions
(
-DUSE_TD_MEMORY
)
endif
()
endif
()
if
(
BUILD_ADDR2LINE
)
target_include_directories
(
os
PUBLIC
"
${
TD_SOURCE_DIR
}
/contrib/libdwarf/src/lib/libdwarf"
)
add_definitions
(
-DUSE_ADDR2LINE
)
target_link_libraries
(
os PUBLIC addr2line dl z
)
endif
()
target_link_libraries
(
target_link_libraries
(
os pthread
os
PUBLIC
pthread
)
)
if
(
NOT TD_WINDOWS
)
if
(
NOT TD_WINDOWS
)
target_link_libraries
(
target_link_libraries
(
os dl m rt
os
PUBLIC
dl m rt
)
)
else
()
else
()
target_link_libraries
(
target_link_libraries
(
os ws2_32 iconv msvcregex wcwidth winmm
os
PUBLIC
ws2_32 iconv msvcregex wcwidth winmm
)
)
endif
(
NOT TD_WINDOWS
)
endif
(
NOT TD_WINDOWS
)
source/os/src/osMemory.c
浏览文件 @
32e65573
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
#include <malloc.h>
#include <malloc.h>
#include "os.h"
#include "os.h"
#if
def USE_TD_MEMORY
#if
defined(USE_TD_MEMORY) || defined(USE_ADDR2LINE)
#define TD_MEMORY_SYMBOL ('T' << 24 | 'A' << 16 | 'O' << 8 | 'S')
#define TD_MEMORY_SYMBOL ('T' << 24 | 'A' << 16 | 'O' << 8 | 'S')
...
@@ -71,14 +71,110 @@ int32_t taosBackTrace(void **buffer, int32_t size) {
...
@@ -71,14 +71,110 @@ int32_t taosBackTrace(void **buffer, int32_t size) {
return
frame
;
return
frame
;
}
}
#endif
// char **taosBackTraceSymbols(int32_t *size) {
// char **taosBackTraceSymbols(int32_t *size) {
// void *buffer[20] = {NULL};
// void *buffer[20] = {NULL};
// *size = taosBackTrace(buffer, 20);
// *size = taosBackTrace(buffer, 20);
// return backtrace_symbols(buffer, *size);
// return backtrace_symbols(buffer, *size);
// }
// }
#ifdef USE_ADDR2LINE
#include "osThread.h"
#include "libdwarf.h"
#include "dwarf.h"
#define DW_PR_DUu "llu"
typedef
struct
lookup_table
{
Dwarf_Line
*
table
;
Dwarf_Line_Context
*
ctxts
;
int
cnt
;
Dwarf_Addr
low
;
Dwarf_Addr
high
;
}
lookup_tableT
;
extern
int
create_lookup_table
(
Dwarf_Debug
dbg
,
lookup_tableT
*
lookup_table
);
extern
void
delete_lookup_table
(
lookup_tableT
*
lookup_table
);
size_t
addr
=
0
;
lookup_tableT
lookup_table
;
Dwarf_Debug
tDbg
;
static
TdThreadOnce
traceThreadInit
=
PTHREAD_ONCE_INIT
;
void
endTrace
()
{
delete_lookup_table
(
&
lookup_table
);
dwarf_finish
(
tDbg
);
}
void
startTrace
()
{
int
ret
;
Dwarf_Ptr
errarg
=
0
;
FILE
*
fp
=
fopen
(
"/proc/self/maps"
,
"r"
);
fscanf
(
fp
,
"%lx-"
,
&
addr
);
fclose
(
fp
);
ret
=
dwarf_init_path
(
"/proc/self/exe"
,
NULL
,
0
,
DW_GROUPNUMBER_ANY
,
NULL
,
errarg
,
&
tDbg
,
NULL
);
if
(
ret
==
DW_DLV_NO_ENTRY
)
{
printf
(
"Unable to open file"
);
return
;
}
ret
=
create_lookup_table
(
tDbg
,
&
lookup_table
);
if
(
ret
!=
DW_DLV_OK
)
{
printf
(
"Unable to create lookup table"
);
return
;
}
atexit
(
endTrace
);
}
static
void
print_line
(
Dwarf_Debug
dbg
,
Dwarf_Line
line
,
Dwarf_Addr
pc
)
{
char
*
linesrc
=
"??"
;
Dwarf_Unsigned
lineno
=
0
;
if
(
line
)
{
dwarf_linesrc
(
line
,
&
linesrc
,
NULL
);
dwarf_lineno
(
line
,
&
lineno
,
NULL
);
}
printf
(
"%s:%"
DW_PR_DUu
"
\n
"
,
linesrc
,
lineno
);
if
(
line
)
dwarf_dealloc
(
dbg
,
linesrc
,
DW_DLA_STRING
);
}
void
taosPrintBackTrace
()
{
int
size
=
20
;
void
**
buffer
[
20
];
Dwarf_Addr
pc
;
int32_t
frame
=
0
;
void
**
ebp
;
void
**
ret
=
NULL
;
size_t
func_frame_distance
=
0
;
taosThreadOnce
(
&
traceThreadInit
,
startTrace
);
if
(
buffer
!=
NULL
&&
size
>
0
)
{
ebp
=
taosGetEbp
();
func_frame_distance
=
(
size_t
)
*
ebp
-
(
size_t
)
ebp
;
while
(
ebp
&&
frame
<
size
&&
(
func_frame_distance
<
(
1ULL
<<
24
))
&&
(
func_frame_distance
>
0
))
{
ret
=
ebp
+
1
;
buffer
[
frame
++
]
=
*
ret
;
ebp
=
(
void
**
)(
*
ebp
);
func_frame_distance
=
(
size_t
)
*
ebp
-
(
size_t
)
ebp
;
}
for
(
size_t
i
=
0
;
i
<
frame
;
i
++
)
{
pc
=
(
size_t
)
buffer
[
i
]
-
addr
;
if
(
pc
>
0
)
{
if
(
pc
>=
lookup_table
.
low
&&
pc
<
lookup_table
.
high
)
{
Dwarf_Line
line
=
lookup_table
.
table
[
pc
-
lookup_table
.
low
];
if
(
line
)
print_line
(
tDbg
,
line
,
pc
);
}
}
}
}
}
#endif
#endif
#endif
#ifndef USE_ADDR2LINE
void
taosPrintBackTrace
()
{
return
;
}
#endif
#endif
void
*
taosMemoryMalloc
(
int32_t
size
)
{
void
*
taosMemoryMalloc
(
int32_t
size
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录