WoW:API debugstack: Difference between revisions
Jump to navigation
Jump to search
(→Example: fixed a copy/paste typo and missing parentheses) |
(Added a second example that can pull the line number of itself in a file. Useful for debug purposes in an addon.) |
||
| Line 51: | Line 51: | ||
file.lua:19 | file.lua:19 | ||
== Example 2 == | |||
Combining debugstack with a strmatch can enable you to get the current line of a function call. | |||
1: function debugprint(msg) | |||
2: local line = strmatch(debugstack(2),":(%d):"); | |||
3: print("Debug Print on Line "..line.." with message: "..msg); | |||
4: end | |||
5: | |||
6: function doSomething() | |||
7: debugprint("We tried to do something."); | |||
8: end | |||
This would return the following output from print: | |||
Debug Print on Line 7 with message: We tried to do something. | |||
Note that despite its all-lowercase name, this is not a core [[Lua]] function. It is a WoW API. | Note that despite its all-lowercase name, this is not a core [[Lua]] function. It is a WoW API. | ||
Revision as of 03:17, 19 November 2017
← WoW API < debugstack
Output a string representation of the current calling stack, similar to the standard Lua debug.traceback() call, which is not present in WoW.
description = debugstack([start[, count1[, count2]]])
Arguments
Parameters
- start
- Number - the stack depth at which to start the stack trace (default 1 - the function calling debugstack)
- count1
- Number - the number of functions to output at the top of the stack (default 12)
- count2
- Number - the number of functions to output at the bottom of the stack (default 10)
Returns
- description
- String - a multi-line string showing what the current call stack looks like
If there are more than count1+count2 calls in the stack, they are separated by a "..." line.
Example
Assume the following example file, "file.lua":
1: function a()
2: error("Boom!");
3: end
4:
5: function b() a(); end
6:
7: function c() b(); end
8:
9: function d() c(); end
10:
11: function e() d(); end
12:
13: function f() e(); end
14:
15: function errhandler(msg)
16: print (msg .. "\nCall stack: \n" .. debugstack(2, 3, 2));
17: end
18:
19: xpcall(f, errhandler);
This would output something along the following:
file.lua:2: Boom! Call stack: file.lua:2: in function a file.lua:5: in function b file.lua:7: in function c ... file.lua:13: in function f file.lua:19
Example 2
Combining debugstack with a strmatch can enable you to get the current line of a function call.
1: function debugprint(msg)
2: local line = strmatch(debugstack(2),":(%d):");
3: print("Debug Print on Line "..line.." with message: "..msg);
4: end
5:
6: function doSomething()
7: debugprint("We tried to do something.");
8: end
This would return the following output from print:
Debug Print on Line 7 with message: We tried to do something.
Note that despite its all-lowercase name, this is not a core Lua function. It is a WoW API.