xmake 提供了一些内置的条件判断api,用于在选择性编译时,获取到一些工程状态的相关信息,来调整编译逻辑。。
例如:is_os, is_plat, is_arch, is_kind, is_mode, is_option
is_mode
我们先拿最常用的is_mode来讲讲如何使用,这个api主要用来判断当前的编译模式,例如平常编译配置的时候,会执行:
bash
$ xmake f -m debug
$ xmake
来编译debug版本,那么模式就是debug,那么release版本,也就是release了
bash
$ xmake f -m release
$ xmake
但是如果仅仅只是这么配置,xmake
继续阅读 »
本文翻译自liusy182
Jest框架是facebook旗下一款单元测试框架,我个人十分喜欢它,因为它自动mock这一点十分强大。然而,当它遇到问题的时候,就会经常抛出一些模糊的调用栈信息。我在网上搜索尝试找到如何debug Jest测试的方法,却很难找到有用的信息。总之,它仍然还是一个比较新的测试框架。
Jest使用虚拟DOM来运行测试。这一点不同于Karma和Jasmine(它们是利用浏览器来运行测试的)。我觉得这就会给它带来一个很大的缺点:不能使用浏览器上的调试工具来调试Jest的测试。因此,我们需要借助于Node/V8引擎自带的调试器。Node默认的调试器是完全基于命令行形式的,类似于GDB - 虽然我从来就不
继续阅读 »
现在xmake在windows下,也已经支持调试运行了,可以在编译完debug版本的程序后,直接进行调试开发。。
我们继续以tbox工程为例:
bash
$ xmake f -m debug
$ xmake r -d demo
上述命令,先配置了debug模式编译,为了启用pdb调试符号文件的生成,然后自动编译后,调试运行demo程序。。
xmake会在配置的时候,自动检测windows上注册表里面的默认调试器,然后加载我们的目标程序并运行。
一般情况下,加载的是vs自带的vsjitdebugger调试器,当然xmake也支持windbg和ollydbg(做逆向的,这个用的比较多哈。。)
我们试着运行demo中的exc
继续阅读 »
mdtoc start
表现
解决方法
定位问题过程
gdb-python: 搞清楚python程序在做什么
准备gdb
接入gdb
查看线程
查看调用栈
coredump
其他命令
pyrasite: 连接进入python程序
psutil 查看python进程状态
guppy 取得内存使用的各种对象占用情况
无法回收的对象
不可回收对象的例子 🌰
objgraph 查找循环引用
继续阅读 »
mdtoc start
表现
重现问题的代码
解决方法
原因
继续阅读 »
如果你只想编译当前主机环境的平台,例如在windows上编译windows版本,在macosx上编译macosx版本,那么你只需要敲以下命令即可:
bash
xmake
因为xmake默认会去检测当前的环境,默认编译当前主机的平台版本,不需要做额外的配置,并且默认编译的是release版本。
如果工程里面有多个目标,那么上面的命令,会去编译所有目标,如果只想编译指定一个目标,例如:test,那么只需执行:
bash
xmake test
如果你想编译debug版本,那么需要做些简单的配置:
bash
xmake config --mode=debug
xmake
xmake针对每个
继续阅读 »
翻译自:Introduction to JavaScript Source Maps
水平有限,有表达错误和不准确的地方,可以在回复中直接指出来,英语水平高的同学可以直接看上面的原文。
下面开始正文。
你有没有希望保持你的客户端代码可读性,更重要的是可调式性,即使你合并和压缩过代码,同时又不影响性能?现在你可以通过 Source Maps 的魔力来实现。
从根本上说,这是一种将合并/压缩后的文件映射回未构建状态的方式。当构建产品,合并和压缩你的 JavaScript 文件的同时,生成一个包含源文件信息的 Source Maps 文件。当你查询生成后的文件中某一行号和列号的位置时,你可以通过 Source Maps 来返回它所
继续阅读 »
GDB是大多数Hackers的首选,阻止GDB依附到应用的常规办法是:
```
import
int main(int argc, char * argv[])
{
ifndef DEBUG
ptrace(PT_DENY_ATTACH,0,0,0);
endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([WQMainPageAppDelegate class]));
}
}
```
继续阅读 »
最近对xmake.lua的工程描述语法进行了增强,现已可以同时支持两种不同语法风格。
set-add描述风格
key-val描述风格
set-add描述风格
这种是xmake经典的设置风格,例如:
lua
target("test")
set_kind("static")
add_defines("DEBUG")
add_files("src/*.c", "test/*.cpp")
优势:控制灵活,可以根据各种条件,通过if-then进行灵活的条件编译,可以驾驭各种高度复杂的配置需求。
劣势:作用域控制不明显,需要手动规范化缩进
key-val描述风格
这种是xmake最近新加的风格,例如:
l
继续阅读 »
Recently, xmake's description syntax has been enhanced to support two different grammar styles at the same time.
The set-add style
The key-val style
The set-add style
This is xmake's classic style, for example:
lua
target("test")
set_kind("static")
add_defines("DEBUG")
add_files("src/*.c", "test/*.cpp")
继续阅读 »