- 浏览: 982294 次
- 性别:
- 来自: 广州
最新评论
-
qingchuwudi:
有用,非常感谢!
erlang进程的优先级 -
zfjdiamond:
你好 这条命令 在那里输入??
你们有yum 我有LuaRocks -
simsunny22:
这个是在linux下运行的吧,在window下怎么运行escr ...
escript的高级特性 -
mozhenghua:
http://www.erlang.org/doc/apps/ ...
mnesia 分布协调的几个细节 -
fxltsbl:
A new record of 108000 HTTP req ...
Haproxy 1.4-dev2: barrier of 100k HTTP req/s crossed
原文地址:http://carpanta.dc.fi.udc.es/docs/erlang/dbg.html
这篇文章是迄今为止发现的最系统的erlang的诊断和系统获取的方法,特别是在gdb下获知
程序的运行状态. 虽然文档有点过时。
(This is fairly Unix-centric; there may be interesting debug facilities
for the Windows user, but I don't know about them.)
To begin with, there is a difference between knowing in advance that
you want to debug something, and trying to find out in real-time what
is going wrong.
In the former case, you can prepare the code you are running in various
ways, which will be discussed below; in the latter, you can only use
what tools are present in the system.
We'll begin with the latter case; i.e., assuming that you have a running
Erlang system, which is misbehaving in some way, and you want to inspect
it.
* How Erlang was invoked
In many situations when debugging, it is useful to know the exact
way the Erlang system was invoked. If you add the option
"-emu_args" to the "erl" command line, it will show you the full
command line of the call to the Erlang emulator.
* Finding out what is going on in a running system
We assume here that you have an Erlang shell before you. If not, this
may be because the Erlang system is running on a different computer,
or not connected to a terminal. To gain access, read the section on
subject further down.
Apart from typing commands into the shell and have them executed, there
are two other ways of getting the attention of the system. Typing ^C
(i.e., sending SIGINT to Erlang) stops all activity [is this true?]
and presents a number of alternatives to you:
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
'a' exits the whole node. So does another ^C.
'p' shows info about pids and ports. erlang:info(procs) does the same.
'i' shows some general info about the system. erlang:info(info) does
the same.
Undocumented:
'q' like 'a'
'm' message info
'o' port info
DEBUG:
't' timer wheel
'b' bin check
'C' does abort(), i.e., dumps core
While the ^C break interaction takes place "outside" all Erlang process
activity, there is another interaction level, which is synchronous
with Erlang input: the ^G level. Typing ^G while an Erlang process
is waiting for input from you presents this prompt
User switch command
-->
and typing 'h' shows this command menu:
c [nn] - connect to job
i [nn] - interrupt job
k [nn] - kill job
j - list all jobs
s - start local shell
r [node] - start remote shell
q - quit erlang
? | h - this message
What am I running?
erlang:info(version)
erlang:info(system_version)
init:script_id()
answer that question.
* Accessing a running system
telnet
(kent)
Distributed access
** Interaction with the shell
The usual result from a call is success and a return value; then
the shell just presents it.
If the call hangs, and you want to interrupt it and get back to the
shell, use "^G i".
If the call hangs, and you try "^G i" and it turns out that the shell
died too, use "^G s c" to start a new one.
Here is how to interpret the various messages that the shell may show
you as a result of evaluating a call:
** exited: Reason **
where Reason is whatever exit reason the process exited with.
Apart from the shell's messages, there may also occur error reports,
which either say the same thing, or give additional information (or
are just a nuisance). See the section about error reports.
When a function calls throw/1 and there is no active catch, the shell
reports this as usual as:
** exited: nocatch **
but it is possible to report the term which was thrown, and this may
be done in a future Erlang version.
** Post-mortem debugging of Erlang processes
Usually, when an Erlang process dies, nothing can be said about it
anymore. Other processes may have a pid which refers to it, but all
attempts to use it either are no-ops, cause an exit, or return something
uninformative like 'undefined'.
Work is in progress on post-mortem debugging, which makes it possible
to inspect the data areas of a process after it has exited.
epmd
Debugging epmd (has to be started debugged, but work is in progress
to make it possible to turn on debug output when epmd is already
running).
* Error reports
One classic debugging tool is trace output. If you have access to the
source code of what you want to debug, insert calls which print out
something interesting to the screen or a file.
In Erlang, you can use the undocumented BIF erlang:display/1 for the
purpose. It writes to stderr, thereby bypassing the normal I/O
mechanisms of Erlang. Using io:format is often just as convenient but
may hang when done in inconvenient places, since it involves message
passing between a number of processes.
Sometimes, calls to error_logger:error_report/[1,2] or similar
functions are already in place, which means that an error report
in a standardized format appears in a designated place.
* Error handler
The error handler handles calls to undefined functions. It is possible
to install an error handler of your own. One exists
(~arndt/erlang/ehan) which tries to find alternatives based on the
assumption that there is a misspelling (or forgotten exportation).
* Analysing crashes
A special case is when your system has crashed. It can do this in a
number of ways, but most will leave you with an Erlang crash dump,
a Unix core dump, or both. (There is also something called a Mnesia
dump, which I know nothing about, so I'll not mention it again.)
A core dump is used for doing post-mortem debugging on the C code
level. You need to start the debugger (gdb) and tell it the location
of the Erlang system which produced the core dump. After this, you
can do most of the things you can do while debugging a live system
with gdb, with some exceptions.
Among the exceptions are calls to debug functions; since there is
no live process anymore, there is no context to execute the
functions in.
If the system seems hung, and you suspect it is looping internally,
you may want it to produce both an Erlang crash dump and and a core
dump. To do that, send the signal SIGUSR1 to it.
* Debug facilities within Erlang
Most Erlang terms which are really references to internal structures,
such as ports, refs, funs and binaries, do not usually show much
information when printed, but the I/O code for them can be made to
show more: ports can be disinguished from each other, binaries are
shown with their size, funs with their arity as well as module, and
refs with their "unique" number.
** BIFs
These BIFs provide some interesting information about the system:
processes/0
erlang:ports/0
registered/0
statistics/1
run_queue
runtime
wall_clock
reductions
garbage_collection
* not documented:
context_switches
io
process_flag/2
trap_exit
error_handler
priority
* not documented:
pre_empt
process_info/2
(process_info/1 leaves out 'memory', 'binary', 'trace'; the latter two are
undocumented)
erlang:port_info/1 (undocumented)
port_info/2
erlang:info/1
info
procs
loaded
dist
system_version
getenv
os_type
os_version
version
machine
garbage_collection
instruction_counts (BEAM only)
erlang:db_all_tables/0
erlang:db_info/2
Not BIFs:
ets:all()
Table = {Name_or_number, Owner}
** minor things
The source code to the small utilities described next can be found
in d.erl in this directory.
** seq trace
** The Erlang debugger/interpreter
** pman
** Hans Nilsson's graphic process display
** appmon
** proc_lib
** process:trace
A simple-minded but useful tracer for Erlang processes:
c("/home/gandalf/arndt/erlang/tracer").
tracer:trace(Pid_to_trace).
** Klacke's top?
~klacke/erlang/top.
** Message size statistics
Work in progress.
** Instrumented Erlang
erl -instr
runs a special version of the emulator, and enables the functions
in the module 'instrument'. You can take a snapshot of the
allocated memory blocks and see what kind of blocks they are.
Mattias has written a program (for Windows) which collects and displays
the memory information graphically.
** Configuring applications
Some applications read the values of application environment variables
to adjust their behaviour. Some of those may be useful when debugging,
such as adjusting timeouts upwards, or enabling trace output.
Example: -kernel net_ticktime 3600
Some applications contain debugging calls in the source code, which
are normally turned off, but can be enabled by making a small change
to the source code and recompiling (or perhaps just define an appropriate
macro on the compiler command line).
* Report Browser - error logs - rb(3)
* Command-line options
The following command-line options are useful for debugging:
+v verbose (only active when compiled with DEBUG)
(enables the "VERBOSE" C macro)
+l auto-load tracing
+debug verbose (only active when compiled with DEBUG)
(enables the "DEBUGF" C macro)
+# sets amount of data to show when displaying BIF errors
from the JAM emulator. Almost worthless, since default
is 100.
+p progress messages while starting (enables the erl_progressf
C function)
-emu_args
On Windows, -console is useful.
* Environment variables
ERLC_EMULATOR is useful to set, when you don't understand what the 'erlc'
command is doing.
ERL_CRASH_DUMP defines the name of the file to write an Erlang crash
dump to.
* C code debugging
If you have access to the C source code, you can compile a version
of Erlang for debugging.
This causes some extra information to be emitted occasionally, and
also allows you to set variables at runtime (using gdb) which will
produce more output.
...
* Static analysis for Erlang
If you have reason to believe that there is a bug somewhere in your
Erlang program, it is probably worth while to subject the source code to
the available static analysis tools:
check calls for format-like functions (this tool is being written)
compile with warnings turned on (or use erl_lint)
exref can be helpful.
** Type checking
* Static analysis for C
Turn on compiler warnings.
* Dynamic analysis for C
Use purify.
* Debugging with gdb
cerl -gdb
r ...
#define BIF_P A__p
#define BIF_ARG_1 A_1
#define BIF_ARG_2 A_2
#define BIF_ARG_3 A_3
The command "show args" is useful.
(gdb) sig 2
sends a ^C to Erlang
To invoke a function within Erlang, do, for example
(gdb) p td(A_1)
char *print_pid(Process *)
ptd(Process *, uint32) "paranoid"
BEAM: pps(Process*, uint32 *stop) "paranoid"
dbg_bt(Process*, uint32 *stop)
dis(uint32 *address, int instructions)
DEBUG:
pat(uint32 atom)
pinfo()
pp(Process *p)
ppi(uint32 process_no)
td(uint32 term)
JAM: pba(Process *, int arity)
ps(Process *, uint32 *stop)
bin_check()
check_tables()
db_bin_check()
p_slpq()
HARD_DEBUG:
check_bins
chk_sys
stack_dump
heap_dump
check_stack
check_heap
check_heap_before
* Debug-compiled Erlang
compile with these flags defined
DEBUG
HARDDEBUG
MESS_DEBUG
OPTRACE
GC_REALLOC
GC_HEAP_TRACE
GC_STACK_TRACE
OLD_HEAP_CREATION_TRACE
...
Only enabled when DEBUG:
erl +v (verbose = 1)
VERBOSE(erl_printf(COUT, "System halted by BIF halt(%s)\n", msg););
erl +debug (debug_log = 1)
DEBUGF(("Using vfork\n"));
附上erl_debug.h 里面gdb用到的常用的函数:
void upp(byte*, int);
void pat(Eterm);
void pinfo(void);
void pp(Process*);
void ppi(Eterm);
void pba(Process*, int);
void td(Eterm);
void ps(Process*, Eterm*);
这篇文章是迄今为止发现的最系统的erlang的诊断和系统获取的方法,特别是在gdb下获知
程序的运行状态. 虽然文档有点过时。
(This is fairly Unix-centric; there may be interesting debug facilities
for the Windows user, but I don't know about them.)
To begin with, there is a difference between knowing in advance that
you want to debug something, and trying to find out in real-time what
is going wrong.
In the former case, you can prepare the code you are running in various
ways, which will be discussed below; in the latter, you can only use
what tools are present in the system.
We'll begin with the latter case; i.e., assuming that you have a running
Erlang system, which is misbehaving in some way, and you want to inspect
it.
* How Erlang was invoked
In many situations when debugging, it is useful to know the exact
way the Erlang system was invoked. If you add the option
"-emu_args" to the "erl" command line, it will show you the full
command line of the call to the Erlang emulator.
* Finding out what is going on in a running system
We assume here that you have an Erlang shell before you. If not, this
may be because the Erlang system is running on a different computer,
or not connected to a terminal. To gain access, read the section on
subject further down.
Apart from typing commands into the shell and have them executed, there
are two other ways of getting the attention of the system. Typing ^C
(i.e., sending SIGINT to Erlang) stops all activity [is this true?]
and presents a number of alternatives to you:
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
'a' exits the whole node. So does another ^C.
'p' shows info about pids and ports. erlang:info(procs) does the same.
'i' shows some general info about the system. erlang:info(info) does
the same.
Undocumented:
'q' like 'a'
'm' message info
'o' port info
DEBUG:
't' timer wheel
'b' bin check
'C' does abort(), i.e., dumps core
While the ^C break interaction takes place "outside" all Erlang process
activity, there is another interaction level, which is synchronous
with Erlang input: the ^G level. Typing ^G while an Erlang process
is waiting for input from you presents this prompt
User switch command
-->
and typing 'h' shows this command menu:
c [nn] - connect to job
i [nn] - interrupt job
k [nn] - kill job
j - list all jobs
s - start local shell
r [node] - start remote shell
q - quit erlang
? | h - this message
What am I running?
erlang:info(version)
erlang:info(system_version)
init:script_id()
answer that question.
* Accessing a running system
telnet
(kent)
Distributed access
** Interaction with the shell
The usual result from a call is success and a return value; then
the shell just presents it.
If the call hangs, and you want to interrupt it and get back to the
shell, use "^G i".
If the call hangs, and you try "^G i" and it turns out that the shell
died too, use "^G s c" to start a new one.
Here is how to interpret the various messages that the shell may show
you as a result of evaluating a call:
** exited: Reason **
where Reason is whatever exit reason the process exited with.
Apart from the shell's messages, there may also occur error reports,
which either say the same thing, or give additional information (or
are just a nuisance). See the section about error reports.
When a function calls throw/1 and there is no active catch, the shell
reports this as usual as:
** exited: nocatch **
but it is possible to report the term which was thrown, and this may
be done in a future Erlang version.
** Post-mortem debugging of Erlang processes
Usually, when an Erlang process dies, nothing can be said about it
anymore. Other processes may have a pid which refers to it, but all
attempts to use it either are no-ops, cause an exit, or return something
uninformative like 'undefined'.
Work is in progress on post-mortem debugging, which makes it possible
to inspect the data areas of a process after it has exited.
epmd
Debugging epmd (has to be started debugged, but work is in progress
to make it possible to turn on debug output when epmd is already
running).
* Error reports
One classic debugging tool is trace output. If you have access to the
source code of what you want to debug, insert calls which print out
something interesting to the screen or a file.
In Erlang, you can use the undocumented BIF erlang:display/1 for the
purpose. It writes to stderr, thereby bypassing the normal I/O
mechanisms of Erlang. Using io:format is often just as convenient but
may hang when done in inconvenient places, since it involves message
passing between a number of processes.
Sometimes, calls to error_logger:error_report/[1,2] or similar
functions are already in place, which means that an error report
in a standardized format appears in a designated place.
* Error handler
The error handler handles calls to undefined functions. It is possible
to install an error handler of your own. One exists
(~arndt/erlang/ehan) which tries to find alternatives based on the
assumption that there is a misspelling (or forgotten exportation).
* Analysing crashes
A special case is when your system has crashed. It can do this in a
number of ways, but most will leave you with an Erlang crash dump,
a Unix core dump, or both. (There is also something called a Mnesia
dump, which I know nothing about, so I'll not mention it again.)
A core dump is used for doing post-mortem debugging on the C code
level. You need to start the debugger (gdb) and tell it the location
of the Erlang system which produced the core dump. After this, you
can do most of the things you can do while debugging a live system
with gdb, with some exceptions.
Among the exceptions are calls to debug functions; since there is
no live process anymore, there is no context to execute the
functions in.
If the system seems hung, and you suspect it is looping internally,
you may want it to produce both an Erlang crash dump and and a core
dump. To do that, send the signal SIGUSR1 to it.
* Debug facilities within Erlang
Most Erlang terms which are really references to internal structures,
such as ports, refs, funs and binaries, do not usually show much
information when printed, but the I/O code for them can be made to
show more: ports can be disinguished from each other, binaries are
shown with their size, funs with their arity as well as module, and
refs with their "unique" number.
** BIFs
These BIFs provide some interesting information about the system:
processes/0
erlang:ports/0
registered/0
statistics/1
run_queue
runtime
wall_clock
reductions
garbage_collection
* not documented:
context_switches
io
process_flag/2
trap_exit
error_handler
priority
* not documented:
pre_empt
process_info/2
(process_info/1 leaves out 'memory', 'binary', 'trace'; the latter two are
undocumented)
erlang:port_info/1 (undocumented)
port_info/2
erlang:info/1
info
procs
loaded
dist
system_version
getenv
os_type
os_version
version
machine
garbage_collection
instruction_counts (BEAM only)
erlang:db_all_tables/0
erlang:db_info/2
Not BIFs:
ets:all()
Table = {Name_or_number, Owner}
** minor things
The source code to the small utilities described next can be found
in d.erl in this directory.
** seq trace
** The Erlang debugger/interpreter
** pman
** Hans Nilsson's graphic process display
** appmon
** proc_lib
** process:trace
A simple-minded but useful tracer for Erlang processes:
c("/home/gandalf/arndt/erlang/tracer").
tracer:trace(Pid_to_trace).
** Klacke's top?
~klacke/erlang/top.
** Message size statistics
Work in progress.
** Instrumented Erlang
erl -instr
runs a special version of the emulator, and enables the functions
in the module 'instrument'. You can take a snapshot of the
allocated memory blocks and see what kind of blocks they are.
Mattias has written a program (for Windows) which collects and displays
the memory information graphically.
** Configuring applications
Some applications read the values of application environment variables
to adjust their behaviour. Some of those may be useful when debugging,
such as adjusting timeouts upwards, or enabling trace output.
Example: -kernel net_ticktime 3600
Some applications contain debugging calls in the source code, which
are normally turned off, but can be enabled by making a small change
to the source code and recompiling (or perhaps just define an appropriate
macro on the compiler command line).
* Report Browser - error logs - rb(3)
* Command-line options
The following command-line options are useful for debugging:
+v verbose (only active when compiled with DEBUG)
(enables the "VERBOSE" C macro)
+l auto-load tracing
+debug verbose (only active when compiled with DEBUG)
(enables the "DEBUGF" C macro)
+# sets amount of data to show when displaying BIF errors
from the JAM emulator. Almost worthless, since default
is 100.
+p progress messages while starting (enables the erl_progressf
C function)
-emu_args
On Windows, -console is useful.
* Environment variables
ERLC_EMULATOR is useful to set, when you don't understand what the 'erlc'
command is doing.
ERL_CRASH_DUMP defines the name of the file to write an Erlang crash
dump to.
* C code debugging
If you have access to the C source code, you can compile a version
of Erlang for debugging.
This causes some extra information to be emitted occasionally, and
also allows you to set variables at runtime (using gdb) which will
produce more output.
...
* Static analysis for Erlang
If you have reason to believe that there is a bug somewhere in your
Erlang program, it is probably worth while to subject the source code to
the available static analysis tools:
check calls for format-like functions (this tool is being written)
compile with warnings turned on (or use erl_lint)
exref can be helpful.
** Type checking
* Static analysis for C
Turn on compiler warnings.
* Dynamic analysis for C
Use purify.
* Debugging with gdb
cerl -gdb
r ...
#define BIF_P A__p
#define BIF_ARG_1 A_1
#define BIF_ARG_2 A_2
#define BIF_ARG_3 A_3
The command "show args" is useful.
(gdb) sig 2
sends a ^C to Erlang
To invoke a function within Erlang, do, for example
(gdb) p td(A_1)
char *print_pid(Process *)
ptd(Process *, uint32) "paranoid"
BEAM: pps(Process*, uint32 *stop) "paranoid"
dbg_bt(Process*, uint32 *stop)
dis(uint32 *address, int instructions)
DEBUG:
pat(uint32 atom)
pinfo()
pp(Process *p)
ppi(uint32 process_no)
td(uint32 term)
JAM: pba(Process *, int arity)
ps(Process *, uint32 *stop)
bin_check()
check_tables()
db_bin_check()
p_slpq()
HARD_DEBUG:
check_bins
chk_sys
stack_dump
heap_dump
check_stack
check_heap
check_heap_before
* Debug-compiled Erlang
compile with these flags defined
DEBUG
HARDDEBUG
MESS_DEBUG
OPTRACE
GC_REALLOC
GC_HEAP_TRACE
GC_STACK_TRACE
OLD_HEAP_CREATION_TRACE
...
Only enabled when DEBUG:
erl +v (verbose = 1)
VERBOSE(erl_printf(COUT, "System halted by BIF halt(%s)\n", msg););
erl +debug (debug_log = 1)
DEBUGF(("Using vfork\n"));
附上erl_debug.h 里面gdb用到的常用的函数:
void upp(byte*, int);
void pat(Eterm);
void pinfo(void);
void pp(Process*);
void ppi(Eterm);
void pba(Process*, int);
void td(Eterm);
void ps(Process*, Eterm*);
评论
7 楼
rain2005
2010-02-04
这里都将的是运行时分析和诊断日志,俺这两天用了一把eclipse erlide的debug也不错的,对我们这种熟悉java debug的同志很实用。完全和调试java一样了。
6 楼
mryufeng
2009-11-05
没看到 当然不成功
5 楼
whrllm
2009-11-05
老大 请教个问题,我按照这些步骤编译了,而且过程没有出错,
但是我用 m(lists),并没有看到debug_info,native,"{hipe, [o3]}"] 这个显示,是不是没有成功啊?
但是我用 m(lists),并没有看到debug_info,native,"{hipe, [o3]}"] 这个显示,是不是没有成功啊?
4 楼
mryufeng
2009-10-16
kill SIGUSR1 pid
to produce both an Erlang crash dump and and a core
dump
to produce both an Erlang crash dump and and a core
dump
3 楼
whrllm
2009-10-16
老大请问一下,这段
If the system seems hung, and you suspect it is looping internally,
you may want it to produce both an Erlang crash dump and and a core
dump. To do that, send the signal SIGUSR1 to it.
中的send the signal SIGUSR1 to it.这句是什么意思?SIGUSR1是什么,怎么发送?出什么效果?谢谢
If the system seems hung, and you suspect it is looping internally,
you may want it to produce both an Erlang crash dump and and a core
dump. To do that, send the signal SIGUSR1 to it.
中的send the signal SIGUSR1 to it.这句是什么意思?SIGUSR1是什么,怎么发送?出什么效果?谢谢
2 楼
mryufeng
2009-08-05
我这是满世界翻箱倒柜的 好不容易找出 极品的 虽然过了点年头 但是很有价值 就共享了哦。。。
1 楼
litaocheng
2009-08-05
慢慢学习,这样的文章您也能翻出来,厉害哈哈
发表评论
-
OTP R14A今天发布了
2010-06-17 14:36 2677以下是这次发布的亮点,没有太大的性能改进, 主要是修理了很多B ... -
R14A实现了EEP31,添加了binary模块
2010-05-21 15:15 3030Erlang的binary数据结构非常强大,而且偏向底层,在作 ... -
如何查看节点的可用句柄数目和已用句柄数
2010-04-08 03:31 4814很多同学在使用erlang的过程中, 碰到了很奇怪的问题, 后 ... -
获取Erlang系统信息的代码片段
2010-04-06 21:49 3475从lib/megaco/src/tcp/megaco_tcp_ ... -
iolist跟list有什么区别?
2010-04-06 20:30 6529看到erlang-china.org上有个 ... -
erlang:send_after和erlang:start_timer的使用解释
2010-04-06 18:31 8386前段时间arksea 同学提出这个问题, 因为文档里面写的很不 ... -
Latest news from the Erlang/OTP team at Ericsson 2010
2010-04-05 19:23 2013参考Talk http://www.erlang-factor ... -
对try 异常 运行的疑问,为什么出现两种结果
2010-04-05 19:22 2842郎咸武<langxianzhe@163.com> ... -
Erlang ERTS Async基础设施
2010-03-19 00:03 2517其实Erts的Async做的很不错的, 相当的完备, 性能又高 ... -
CloudI 0.0.9 Released, A Cloud as an Interface
2010-03-09 22:32 2476基于Erlang的云平台 看了下代码 质量还是不错的 完成了不 ... -
Memory matters - even in Erlang (再次说明了了解内存如何工作的必要性)
2010-03-09 20:26 3439原文地址:http://www.lshift.net/blog ... -
Some simple examples of using Erlang’s XPath implementation
2010-03-08 23:30 2050原文地址 http://www.lshift.net/blog ... -
lcnt 环境搭建
2010-02-26 16:19 2614抄书:otp_doc_html_R13B04/lib/tool ... -
Erlang强大的代码重构工具 tidier
2010-02-25 16:22 2486Jan 29, 2010 We are very happy ... -
[Feb 24 2010] Erlang/OTP R13B04 has been released
2010-02-25 00:31 1387Erlang/OTP R13B04 has been rele ... -
R13B04 Installation
2010-01-28 10:28 1390R13B04后erlang的源码编译为了考虑移植性,就改变了编 ... -
Running tests
2010-01-19 14:51 1486R13B03以后 OTP的模块加入了大量的测试模块,这些模块都 ... -
R13B04在细化Binary heap
2010-01-14 15:11 1508从github otp的更新日志可以清楚的看到otp R13B ... -
R13B03 binary vheap有助减少binary内存压力
2009-11-29 16:07 1668R13B03 binary vheap有助减少binary内存 ... -
erl_nif 扩展erlang的另外一种方法
2009-11-26 01:02 3218我们知道扩展erl有2种方法, driver和port. 这2 ...
相关推荐
【标题】:Debugging Tools for Windows.zip 【描述】:这个压缩包文件“Debugging Tools for Windows.zip”包含了用于Windows环境下的调试工具,特别针对Qt Creator的调试器配置问题。通常,当Qt Creator的调试器...
标题中的“Debugging tools for windows(x86 6.10.3.233)”指的是特定版本的Windows调试工具,适用于x86架构,并且版本号为6.10.3.233。这个工具集包含了多种调试器,如WinDbg、KD、CDB和NTSD,它们都是系统级调试的...
Debugging Tools for Windows (x64)和Debugging Tools for Windows (x86) 微软Debugging Tools for Windows工具,简称windbg,查看dmp文件,调试驱动程序、应用程序等。
Debugging Tools for Windows,是为WINDOWS设计的调试程序工具,能够查看软件指令栈等功能。
《The Linux® Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures》 - **作者**:Claudia Salzberg, Gordon Fischer, Steven Smolski - **出版时间**:2006年 - **内容**:本书从顶层架构入手...
《Windows分析工具——Debugging Tools for Windows (x86)深度解析》 Windows操作系统在运行过程中,有时会遇到各种异常情况,导致系统错误或应用程序崩溃。为了有效地诊断和解决这些问题,微软提供了一套强大的...
目前CSDN下载频道中的微软调试工具WinDbg(即Debugging Tools for Windows)大都不适用于Win10系统,在Windows10中会报错:Could not find the xxx\MEMORY.DMP Dump File,Win32 error On87。这里提供的WinDbg10下载...
Windows操作系统提供了一套强大的调试工具——"Debugging Tools for Windows (x86)",这套工具对于在32位Windows环境下进行深度调试工作具有极高的价值。本文将深入探讨这些工具的使用以及如何在Qt环境中集成和应用...
Windows 调试器 (简称WinDbg) 可用于调试内核模式和用户模式代码,来分析故障转储,并检查代码时 CPU 寄存器执行。适用于visual studio、qt和其他的IDE集成工具的调试工具。
《调试——发现最难以捉摸的软件和硬件问题的9个不可或缺的规则》是一本深入探讨调试技术的书籍。本书的核心在于提供一套行之有效的规则,帮助开发者和IT专业人士解决那些看似无解的问题。以下是对书中部分内容的...
Debugging Tools for Windows(x64) Debugging Tools for Windows(x86) 写QT程序时,要使用的abi调试器. 包含以下文件: WinSDKDebuggingTools WinSDKDebuggingTools_amd64 WinSDKDebuggingTools_ia64 ...
<编写 Debugging Tools for Windows 扩展,第 3 部分:客户端和回调> <编写 Debugging Tools for Windows 扩展,第 2 部分:输出> <编写 Debugging Tools for Windows 扩展,第 1 部分> 三篇文章的所涉及的代码实例
Debugging Tools for Windows 是一套强大的开发和调试工具,主要用于对Windows操作系统进行深入的故障排查和性能分析。这个工具集包含了多种实用程序,如WinDbg、KD、CDB、NTSD等,它们都是针对不同场景的专业调试器...
Debugging Tools for Windows 软件包中生成符号服务器的实用程序
Windbg近一年来都没有更新了,这次的更新又没有提供单独的下载链接,特此为只需要Windbg的朋友提供一个快捷的下载链接
In the predecessor volume of Debugging Applications for Microsoft .NET and Microsoft Windows, which dealt with Visual Basic 6, John Robbins broke new ground by codifying the techniques and strategies ...
本文将重点介绍一款名为"Debugging Tools for Windows (x86)"的强大工具集,它为C++程序员提供了强大的调试和内存检查功能,帮助开发者高效地定位和解决代码中的问题。 Debugging Tools for Windows是微软提供的一...
它是微软开发的Debugging Tools for Windows套件的一部分,广泛应用于软件开发、系统崩溃分析、性能优化等领域。这款工具提供了丰富的命令行和图形界面功能,帮助开发者深入理解程序运行时的内部状态,定位和修复...