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