2019-07-03 testeth调试

2022-05-13 08:28:58 浏览数 (1)

testeth在ubuntu18虚拟机下使用vscode编译总是出现卡死,无法进行调试,改用mac本xcode编译调试成功,这里记录一下过程

1、编译aleth

代码语言:javascript复制
git clone --recursive https://github.com/ethereum/aleth.git
cd aleth

由于是debug版本,这里修改CMakeLists.txt文件,在尾部增加

代码语言:javascript复制
SET(CMAKE_BUILD_TYPE "Debug")  
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")  
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") 

然后:

代码语言:javascript复制
mkdir build; cd build 
cmake -G "Xcode" .. 

本来这个时候可以用xcode打开buildaleth.xcodeproj文件开始编译,但是公司网络有代理,而xcode在代理下无法下载软件包,总是在哪里重试,因此改命令行编译,命令行下可以通过

代码语言:javascript复制
export http_proxy=myproxy:myport
export https_proxy=myproxy:myport

设置代理后编译,先用下面的命令查看编译选项,

代码语言:javascript复制
xcodebuild -list -project aleth.xcodeproj

我们选择ALL_BUILD编译所有

代码语言:javascript复制
xcodebuild -scheme ALL_BUILD

漫长等待编译成功

2、编译hera

参考2019-04-26 使用Testeth跑ewasm测试集

代码语言:javascript复制
cd ../../
git clone https://github.com/ewasm/hera --recursive
cd hera
mkdir build && cd build
cmake .. -DBUILD_SHARED_LIBS=ON
cmake --build .

然后把动态库复制到testeth的目录下

代码语言:javascript复制
cp src/libhera.so ../../aleth/build/test/.

测试用例的下载也参考上面的文章,否则后面的测试用例不存在

3、testeth调试

用xcode打开buildaleth.xcodeproj,在toolbar中选择项目testeth,然后点击edit Scheme...,设置Arguments中Arguments Passed On Launch:

代码语言:javascript复制
-t GeneralStateTests/stEWASMTests -- --vm /Users/elikong/work/hera/build/src/libhera.dylib --singletest createFromTransaction --singlenet "Byzantium" --evmc metering=true fallback=true

还需要在Options中设置Working Directory:

代码语言:javascript复制
/Users/elikong/work/aleth/build/test

否则执行会找不到测试用例

断点设置:

代码语言:javascript复制
加载动态库:VMFactory.cpp,void setVMKind(const std::string& _name)
执行合约:EVMC.cpp,owning_bytes_ref EVMC::exec(u256& io_gas, ExtVMFace& _ext, const OnOpFunc& _onOp)
调用动态库函数:evmc.hpp,result execute(evmc_context& ctx,
                   evmc_revision rev,
                   const evmc_message& msg,
                   const uint8_t* code,
                   size_t code_size) noexcept

0 人点赞